$.inArray is giving -1?

$.inArray is giving -1?

本文关键字:giving is inArray      更新时间:2024-01-05

这应该是非常直接的:

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?

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

在这种情况下,结果应该是"2"。

有什么想法吗?

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

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

为什么。。。?如果你是

console.log(itemids_array);

你会看到这个

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

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

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

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

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

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

这种行为记录在data文档中:

每次尝试都会将字符串转换为JavaScript值(包括布尔值、数字、对象、数组和null)。只有在不更改值的表示形式的情况下,值才会转换为数字。例如,"1E02"answers"100.000"等效为数字(数值100),但转换它们会改变它们的表示方式,使它们保留为字符串。字符串值"100"将转换为数字100。

如果您只使用data来读取data-*属性,我建议您使用attr来避免这种情况,并避免由于datadata-*属性初始化,而在设置数据时不会向它们写入而导致的混乱。当然,如果您需要存储与元素相关联的数据,而不希望它出现在属性上(因为它不是字符串数据,或者不希望它显示在DOM检查器中),那么data就是适合该工作的工具。

它不起作用的原因是因为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);

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

CCD_ 21使用严格相等运算符(==)来比较元素。也就是说,由于没有发生类型强制,'26' === 26返回false。

jQuery.data()文档:

每次尝试都会将字符串转换为JavaScript值(这包括布尔值、数字、对象、数组和null)。A值仅当这样做不会更改值的代表。例如,"1E02"answers"100.000"等效为数字(数值100),但转换它们会改变表示,因此它们保留为字符串。字符串值"100"为转换为数字100。