我可以使用jquery访问存储在html元素数据属性中的哈希吗?

时间:2012-10-30 20:49:02

标签: javascript jquery html

我有几个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
    }
});

有没有办法访问通过数据对象传递的哈希,还是有另一种方法可以构建数据,从而实现能够根据键选择元素的相同方法?

3 个答案:

答案 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/