2013-05-03 43 views
0

我試圖顯示所有具有特定數據屬性設置爲特定值的元素,然後隱藏所有其他具有相同數據屬性但具有不同的價值。jQuery數據選擇器查找具有某個數據值的所有元素

代碼我似乎隱藏所有元素,無論他們是否具有數據屬性。

$('*').filter(function() {return $(this).data(dataAttr) == dataVal;}).show(); 
$('*').filter(function() { return $(this).data(dataAttr) !== dataVal; }).hide(); 

我需要這是動態的,因爲我傳遞的是數據屬性的名稱和要匹配的值。

回答

1

代碼我似乎隱藏所有元素,無論他們是否具有數據屬性。

這是因爲您選擇的所有元素都是'*'。如果元素甚至沒有這樣的屬性,那麼您正在比較undefined與值(undefined !== someValue)可能總是true

選擇具有該屬性的所有元素首先,隱藏它們,然後顯示與特定值的那些:

$('[' + dataAttr + ']').hide() 
.filter('[' + dataAttr + '="' + dataVal + '"]').show(); 

我決定,因爲我相信使用.filter.data就會慢很多用在這裏選擇。

+0

就是這樣!謝謝。 – 2013-05-03 22:11:01

+0

我剛剛意識到贏了;我爲我工作,因爲我需要這個來處理已經有display:block的項目。換句話說,沒有顯示的項目不應該受到影響。謝謝。 – 2013-05-03 22:23:20

+0

您可以添加':visible'選擇器,只隱藏可見的元素。 – 2013-05-03 22:48:23

相關問題