2013-05-01 60 views
1

獲取對象我有html更改數據 - ATTR,然後通過數據 - jQuery中

<div class="item" data-value="1">item</div> 

而且js

$('.item[data-value="1"]').data('value', 2'); 

所以,現在我有.itemdata-value="2",我要得到它通過jQuery:

$('.item[data-value="2"]') 

它返回[]

我知道問題在於,jQuery改變了數據值而不是改變data-value屬性。我知道,通過使用attr而不是data可以解決問題。

但是有沒有辦法通過data獲得對象data通過data更改方法?

+0

在哪裏你看到的 「事實」 是的'數據value'犯規得到更新? – PlantTheIdea 2013-05-01 21:19:27

+1

@PlantTheIdea:http://stackoverflow.com/questions/16308608/jquery-data-and-attr-weird-behaviour – uross 2013-05-01 21:23:25

+1

事實是,它*不*更新'data-value'屬性,你可以很容易用一些基本的javascript測試這個。我遇到過類似的情況,如果你的代碼的一部分依賴於屬性值本身,那麼通過data()更改它將不起作用。 ('data-value',abc)' – nzifnab 2013-05-01 21:26:03

回答

1

使用功能從this answer,你可以這樣寫:

$('.item:data(value==2)'); 
+0

它適用於jQuery UI和來自這個答案的功能http://stackoverflow.com/a/2895933/1185123。謝謝。我唯一怕的就是性能 – imkost 2013-05-01 21:35:24

+0

沒問題,謝謝你的編輯。我還沒有測試過,所以我不知道它的性能。 – uross 2013-05-01 21:52:34

+0

坦率地說,我不喜歡jQuery的'data()'方法如何靜默地改變值而不改變屬性(這樣下一次你調用data('value')'你會得到一個與CSS選擇器不同的值'[data-value = something]'我仍然認爲Joe的回答更好,因此屬性本身也會發生變化。 – nzifnab 2013-05-01 22:36:52

0

您已經關閉了支架假:使用

$('.item[data-value="2"]') 

應該工作

.attr('data-value', 2) 

以更新數據值:)

+0

這將不起作用http://jsfiddle.net/dRqyK/1/ – imkost 2013-05-01 21:29:48

+0

使用.attr('data-value',2)以更新它的價值 – ahmet2106 2013-05-01 21:54:55

+0

它的工作原理,但我在我的問題中寫了關於這種方法:「我知道,問題可以通過使用attr方法而不是數據來解決。」 – imkost 2013-05-01 22:08:57

1

您可以使用filterdata方法過濾元素。

$('.item').filter(function() { 
    return $(this).data('value') === '2'; 
}); 

http://jsfiddle.net/3dfX7/

+0

喜歡這種方法!我甚至沒有考慮過濾器。謝謝 – imkost 2013-05-01 21:40:12

相關問題