2012-03-21 47 views
1

我有一個按鈕可以創建一個新的引腳。該針在一個div中。它還創建了一個隱藏輸入來記錄該引腳被拖動時的位置。在我創建的jquery代碼中,我使用.data("my_id",pinNumber)來標記引腳和輸入的div。 PinNumber在創建新引腳時遞增。這意味着帶有新引腳的div和輸入都有一個名爲my_id的數據鍵,其值相同。Jquery .data(),如何檢索具有匹配值的元素?

當一個使用點擊刪除一個引腳上,我希望它刪除與該div相關的div和輸入。這是我的刪除代碼。

$(".close").live("click", function() { 
    var this_id = $(this).parent("div").data("my_id"); 
$('div[data:my_id='+this_id+']').remove(); 

var this_id返回正確的引腳ID。不過,我遇到了如何根據數據值而不是數據鍵選擇元素的問題。

我該怎麼做?如何選擇所有元素或所有div或所有輸入,無論哪裏,數據值=指定值?我在說Jquery .data()不是HTML數據標籤。

PS我使用的是live(),因爲這些引腳是在使用命中新引腳時創建的,因此當代碼首次上線時,DOM元素不存在。一個用途可以創建30個引腳。我需要一種方法,並且我認爲data()方法最適合將針腳div與創建的輸入連接。此外,.draggable()然後會報告具有相同數據值的輸入的用戶界面位置....需要幫助。

回答

2

您可以使用filter()並檢查謂詞的數據值指定:

$("div, input").filter(function() { 
    return $(this).data("my_id") == this_id; 
}).remove(); 
+0

請記住使用三等於運算符=== – 2012-03-21 19:56:20

+0

@Greg,是否有一個原因,你在這種情況下被迫使用嚴格的相等運算符? – 2012-03-21 20:20:15

+0

因爲你不知道this_id是什麼類型。最有可能的是,這裏不會遇到任何類型的強制錯誤,但最好使用嚴格的相等運算符來確保所比較的兩個值是相同的類型。唯一不適用的情況是當你試圖確定一個值是否爲空或未定義。 something == null很好地訣竅 – 2012-03-21 20:24:44

0
var this_id = $(this).parent("div").data("my_id"); 
$('div').each(function() { 
    var this = $(this); 
    if(this.data("my_id") = this_id) { 
     this.remove(); 
    } 
}); 

這可能會實現,雖然是一個壞榜樣。我認爲這些都是糟糕的表現。

+1

與格雷格弗蘭科關於等式運算符的討論,使我意識到你在條件表達式中使用賦值運算符'='而不是其中一個相等運算符'=='或'==='。最終的結果可能不會是你想要的。 – 2012-03-21 20:43:06

+0

的確,我的意思==實際上,我也不會去=== – RTulley 2012-03-21 21:15:26

相關問題