$.inArray is giving -1?
$.inArray is giving -1?
这应该是非常直接的:
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-
属性并将数字解析为数字。
data
函数在初始化时对从data-*
属性读取的数据进行处理,包括将类似数字的字符串转换为数字。由于$.inArray
执行===
检查,这就是它失败的原因。您最终会在字符串数组中查找数字26。
如果您只是简单地使用.attr("data-id")
,转换就不会发生。
这种行为记录在data
文档中:
每次尝试都会将字符串转换为JavaScript值(包括布尔值、数字、对象、数组和null)。只有在不更改值的表示形式的情况下,值才会转换为数字。例如,"1E02"answers"100.000"等效为数字(数值100),但转换它们会改变它们的表示方式,使它们保留为字符串。字符串值"100"将转换为数字100。
如果您只使用data
来读取data-*
属性,我建议您使用attr
来避免这种情况,并避免由于data
从data-*
属性初始化,而在设置数据时不会向它们写入而导致的混乱。当然,如果您需要存储与元素相关联的数据,而不希望它出现在属性上(因为它不是字符串数据,或者不希望它显示在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。
- Is onfling available for html, html5
- jQuery is not loaded
- reactRedux is not defined
- ReferenceError: cordova is not defined @ng-cordova.min.js:7
- Jquery - table.row(tr) is undefined
- contentWindow.document.body is null
- Tomcat websocket is not working
- noty.js is returning undefined
- $routeParams is undefined
- NodeJS Multer is not working
- React, Webpack: bundle.js is not generated
- jQuery is not defined - WordPress footer.php
- 谷歌地图API v3:Initial View is Fine,but Gray Box with No Map if
- imageArray[i] = imageItem is incompatible
- GAPI Is Not Defined
- Angular2 rc1, where is shims_for_IE
- Is (!~index) faster than (index === -1)?
- Mouse Out Orange Div "CurrentHeight" is not applyi
- Is jquery's attr() asynchronous?
- $.inArray is giving -1?