我试图通过其数据属性值找到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]
值的元素)
答案 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值进行解析,则将其保留为字符串。