这应该是非常直接的:
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”。
有什么想法吗?
答案 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。