$ .inArray给-1?

时间:2013-11-29 11:41:46

标签: javascript jquery

这应该是非常直接的:

HTML

<a href="url" id="thumba" data-id="26">my link</a>
<input type="hidden" id="pageids" value="28,27,26,17,18,19,">

Jquery的

  var thumbaid = $('#thumba').data("id");
  // get position
    var itemids = $('#pageids').val(); 
    var itemids_array = itemids.split(',');
    var currentpos = $.inArray(thumbaid, itemids_array );
    alert(currentpos);

给我-1?

有趣的是,如果我将“$(thumba).data(”id“)替换为jquery代码中的数字为”26“,它就可以了!

在这种情况下,结果应为“2”。

有什么想法吗?

5 个答案:

答案 0 :(得分:5)

您需要将值转换为字符串。

var thumbaid = $('#thumba').data("id").toString();

为什么......?如果你要

console.log(itemids_array);
你会看到这个

["28", "27", "26", "17", "18", "19", ""] 

它们不是数字,而是字符串。见http://api.jquery.com/data/

答案 1 :(得分:2)

这是因为thumbaid是一个数字,itemids_array包含字符串。试试var currentpos = $.inArray(thumbaid.toString(), itemids_array );

jQuery的data函数读取data-属性并将数字解析为数字。

答案 2 :(得分:2)

jQuery的data函数对初始化时从data-*属性读取的数据执行操作,包括将类似数字的字符串转换为数字。由于$.inArray执行了===检查,因此失败了。您最终会在字符串数组中查找数字 26。

如果您只是使用.attr("data-id"),则转换不会发生。

此行为记录在data docs

  

每次尝试都将字符串转换为JavaScript值(包括布尔值,数字,对象,数组和null)。如果这样做不会更改值的表示,则只将值转换为数字。例如,“1E02”和“100.000”等同于数字(数值100),但转换它们会改变它们的表示形式,因此它们将保留为字符串。字符串值“100”将转换为数字100。

如果您仅使用data来阅读data-*属性,我建议您使用attr来避免此类事情,并避免因为data data-*属性初始化,在设置数据时,它不会。当然,如果您需要存储与元素关联的数据,并且您不希望它在属性上(因为它不是字符串数据,或者您不希望它显示在DOM检查器中),data是这项工作的正确工具。

答案 3 :(得分:1)

它不起作用的原因是因为jQuery数据返回的是int而不是字符串。

见这个例子。

<a href="url" id="thumba" data-id="26">my link</a>
<input type="hidden" id="pageids" value="28,27,26,17,18,19,">

使用Javascript:

var thumbaid = $('#thumba').data('id').toString();

// get position
var itemids = $('#pageids').val(); 
var itemids_array = itemids.split(',');
console.log(itemids_array);
var currentpos = $.inArray(thumbaid, itemids_array );
console.log(currentpos);

答案 4 :(得分:1)

$().data()会将data-*属性的值转换为JavaScript值。在您的情况下,thumbaid将转换为数字。

$.inArray使用严格相等运算符(===)比较元素。也就是说,'26' === 26返回false,因为没有类型强制发生。

来自jQuery.data()文档:

  

每次尝试都将字符串转换为JavaScript值   (这包括布尔值,数字,对象,数组和null)。一个值   如果这样做不会更改值,则只会转换为数字   表示。例如,&#34; 1E02&#34;和&#34; 100.000&#34;相当于   数字(数值100)但转换它们会改变它们的数字   表示所以它们被保留为字符串。字符串值&#34; 100&#34;是   转换为数字100。