2011-06-08 46 views
1

我需要將一個字母數字字符串附加到一組節點;每個節點都有一個字符串(這不是唯一的)。正確使用jQuery .data

然後,我需要一個點擊處理程序,通過該字符串的值進行過濾。我看到jQuery的.data()函數將存儲在節點上的字符串,但我不能選擇它們。我應該使用attr屬性這樣創建節點:

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

,然後篩選這樣嗎?

$('#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 2011-06-08 22:31:36

+0

@Jasie看看[這個問題](http://stackoverflow.com/questions/5874652/prop-vs-attr/5884994#5884994)。這可能解釋一些這些東西。 – lonesomeday 2011-06-08 22:37:20