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 を使用します。古いブラウザーでのサポートが必要な場合は、ポリフィルがあります。

$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 に答える