2013-01-03 53 views
3

注:這是不是在通過查詢一個基本問題數據屬性jQuery的選擇DOM元素與多個標識符數據屬性在它

我遇到的問題是,我有一定的元素,如所以:

<div data-step="1, 4"> 

我想通了如何分步通過每個[data-step]並提取1, 4,併爲他們創造活動等

讓公司的S唉我想查詢並抓住這個確切的數據步,但所有我給出的是:4

$('[data-step="4"]') 
// this won't work of course 

$('[data-step="1, 4"]') 
// obviously this will work, but at this point I'm only given the index 
// which will only be ONE of these numbers 

基本放棄(對實例的緣故,4)我怎樣才能方便地查詢選擇走出去並搶[data-step="1, 4"]

我能夠想出的是一個循環,它貫穿每個數據步驟,去除所有內容並查看是否匹配。有沒有更簡單的方法?

+4

如果您可以將您的data-step屬性更改爲以空格分隔,則可以使用$(「[data-step〜='4']」)。 – ajshort

+0

@ajshort看起來像這裏最簡單的解決方案!幸運的是,我能夠改變這種情況,這樣更容易處理。歡呼 –

回答

4

~=將找到具有屬性的元素,該屬性具有包含由空格分隔的給定單詞的值。也適用於你的情況。

$('[data-step~="4"]') 

*=會發現元件與具有包含給定的子串的值的屬性。

$('[data-step*="4"]') 
+0

哇我怎麼不知道'〜='!!屬性包含字選擇器,非常好。這完美的作品!如果我只做'〜= 4',那麼對於我的驚喜就不會選擇像'[data-step = 14]'這樣的東西。非常感謝! –

+0

重要的是要知道,提供的選擇器不適用於像'data-step =「1,4,5」'和'data-step =「1,44」'這樣的屬性。 – VisioN

+0

@VisioN:'* ='將適用於'data-step =「1,4,5」'並且發現'44'不是OP正在尋找的東西,如果正確理解它的話。 –

2

你也可以使用filter解決方案:

var search = 4; 
$("[data-step]").filter(function() { 
    return $.inArray("" + search, $(this).data("step").split(/,\s*/)) !== -1; 
}); 
+0

非常好!出於某種原因,我得到了'Uncaught TypeError:對象1沒有方法'split',直到我將它改爲'.attr('data-step')'。但是這個效果也很好! –

+0

@mcpDESIGNS看來你使用舊版本的jQuery =) – VisioN

+0

'1.7.2'仍然是:/很快升級希望! –

0

你需要*前使用=這將返回所有數據步至極是包含子串「價值」 $('[數據步* =「value」]')

相關問題