4

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

有没有一种方法可以访问通过数据对象传递的哈希,或者是否有另一种方法可以构造数据以实现基于键选择元素的相同方法?

4

3 回答 3

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"
于 2012-10-30T20:52:11.347 回答
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
    }
});
于 2012-10-30T20:51:29.880 回答
0

您可能希望将数据序列化为 JSON http://json.org/,然后在 JS 中取回它。您可以使用 jquery 的解析器http://api.jquery.com/jQuery.parseJSON/

于 2012-10-30T20:51:18.873 回答