2011-06-08 7 views
1

ノードのセットに英数字の文字列を付ける必要があります。各ノードには文字列(一意ではない)があります。jQuery .dataの正しい使い方

次に、その文字列の値でフィルタリングするクリックハンドラが必要です。私はjQueryの.data()関数は、ノード上の文字列を格納するが、私はそれらを選択することはできません参照してください。

var node = $('<div class="node"></div>').attr('data-string', "18nn4v"); 

そして、このようにフィルタリング:私はこのようなattrプロパティを使用してノードを作成することになっているだろうか?

$('#something').click(function() { 
    $('.node[data-string="18nn4v"]')...//whatever 
}); 

.data()を使用するといいですね。 jQueryは自動的にすべての"data-XXX"属性をその要素のプロパティー:.data(XXX)にインポートしますが、.data(XXX)プロパティをすべて"data-XXX"属性にエクスポートするわけではありません。

答えて

2

jQuery属性セレクタは、元のHTMLで定義された内容、またはsetAttribute(jQueryのattrで使用されているもの)によってのみ動作します。これは仕様によるもので、正しい動作です。あなたがdataを使用する場合は、filterを使って手動でフィルタリングを行う必要があるでしょう

$('.node').filter(function() { 
    return $.data(this, 'string') === "18nn4v"; 
}). 
+0

私が参照してください。 jQueryはすべての '' data-XXX ''属性を' '.data(XXX)' 'に自動的にインポートするので少し面倒ですが、' .data(XXX) 'のすべてのプロパティをエクスポートしません「data-XXX」属性に! – ash

+0

@Jasie [この質問](http://stackoverflow.com/questions/5874652/prop-vs-attr/5884994#5884994)をご覧ください。それはこのようなもののいくつかを説明するかもしれません。 – lonesomeday