jQuery - 使用each()和inArray()检查数组中是否存在-data元素

时间:2016-08-19 15:49:19

标签: jquery each

我的目标是检查网站上的任何-data(data-id)是否与数组中的元素之一具有相同的值,但inArray始终返回-1

 <a href="#" data-id="2">
 <a href="#" data-id="3">

<script>
var arrayObjects = <?php echo $json_array; ?>;
console.log(arrayObjects);

$("[data-id]").each(function(){
    var data_id = $(this).data('id');

    if(jQuery.inArray(data_id, arrayObjects) > -1) { // f
        console.log(data_id);
        console.log('found');
    } else { // nf
        console.log(data_id);
        console.log('not found');
    }
});

从我的控制台:

["2", "3"]
3
not found
2
not found

1 个答案:

答案 0 :(得分:1)

当您检索数据ID var data_id = $(this).data("id")时,您会获得数字,而 arrayObjects 包含字符串

在此处,检查JSfiddle,您会看到console.log(typeof(data_id))是号码。要完成这项工作,只需添加""+以强制 data_id 成为字符串:

jQuery.inArray(""+data_id, arrayObjects)

更新

正如@barmar指出的那样,var data_id = $(this).attr('data-id')更适合,因为 .attr()方法将返回字符串 .data()< / em>将数据解析为JSON,在我们的案例中给出数字

没有更多强制将类型强制为字符串

的技巧

jQuery.inArray(data_id, arrayObjects)