我有几个html元素,我附加哈希就像这样:
<p class='message' data-dependencies={'#first':{'equal':'Yes'}}>
Relevant Content
</p>
这样
$(".message").first().data("dependencies")
返回
{'#first':{'equal':'Yes'}}
但正如一位好友刚刚向我指出的那样,这个值是一个字符串。因此,下面描述的过滤器很难自然地使用它。
过滤器的目标是能够获取具有指定键的元素,在本例中为“#first”。
$el.children().find("*").filter(function(){
var dependency_hash = $(this).data("dependencies");
if(dependency_hash != undefined && "#first" in dependency_hash){
return true
}
});
有没有办法访问通过数据对象传递的哈希,还是有另一种方法可以构建数据,从而实现能够根据键选择元素的相同方法?
答案 0 :(得分:6)
如果您将其存储为有效的JSON,则可以对其进行解析,并获取内容。
<p class='message' data-dependencies='{"#first":{"equal":"Yes"}}'>
Relevant Content
</p>
var json = $(".message").first().attr("data-dependencies");
// HTML5 browsers
// var json = document.querySelector(".message").dataset.dependencies;
var parsed = $.parseJSON(data);
alert(parsed["#first"].equal); // "Yes"
或者如果你使用jQuery的.data()
,它会自动解析它。
var parsed = $(".message").first().data("dependencies");
alert(parsed["#first"].equal); // "Yes"
答案 1 :(得分:2)
使用JSON.parse。如果您需要在旧版浏览器中提供支持,则可以使用polyfill。
$el.children().find("*").filter(function(){
var dependency_hash = $(this).data("dependencies");
var parsed_hash = JSON.parse(dependency_hash);
if(parsed_hash != undefined && "#first" in parsed_hash ){
return true
}
});
答案 2 :(得分:0)
您可能希望将数据序列化为JSON http://json.org/,然后将其恢复为JS。 您可以使用jquery的解析器http://api.jquery.com/jQuery.parseJSON/