jQuery find()元素由data属性,其值为object

时间:2017-04-24 08:44:21

标签: jquery

我试图通过其数据属性值找到jQuery的元素。问题是,该值是对象,find()函数对我来说无法正常工作...... 数据属性值如下所示:

<tr class="odd" data-row="{"id_construction":2,"created_date":2015-11-30}">

这是我的剧本:

for(var i = 0; i < dataList.length; ++i){
    var constructionId = dataList[i].id_construction;
    if (constructionId == selectedConstructionId) {
        $('.gridator').find('tr[data-row={id_construction:}').addClass('selected-construction');
    }
}

dataList[i]的值为{"id_construction":2,"created_date":2015-11-30}

如何编辑此脚本以查找所需元素? (data-row值等于dataList[i]值的元素)

小提琴:https://jsfiddle.net/og1j1wc3/4/

1 个答案:

答案 0 :(得分:1)

jQuery属性选择器使用字符串,而不是使用存储为JSON的对象 您必须遍历每个属性值才能找到必要的对象:

var $greens = $("div").filter(function() {
  return $(this).data("p").isGreen === true;
});

console.log($greens.length); // 3
$greens.css("color", "green");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div data-p='{"isGreen": true}'>
  one
</div>
<div data-p='{"isGreen":true    }'>
  two
</div>
<div data-p='{"isGreen": false}'>
  three
</div>
<div data-p='{ "otherAttribute": 42, "isGreen": true }'>
  four
</div>

正如您在此代码段中所看到的,空白和其他属性不会影响其工作方式,因为您使用数据而不是字符串。

请注意,根据文档,如果数据属性包含JSON对象,jQuery .data() 会返回一个对象:

  

每次尝试都将字符串转换为JavaScript值(包括布尔值,数字,对象,数组和null)。
  当data属性是一个对象(以'{'开头)或数组(以'['开头)时,则使用jQuery.parseJSON来解析字符串;它必须遵循有效的JSON语法,包括引用的属性名称。如果该值不能作为JavaScript值进行解析,则将其保留为字符串。