我有一个元素,我想提供一个包含一系列值的数据属性,即Array
。然后,我希望能够根据该系列中的任何值选择它。像这样:
<div id="example" data-my-series='["foo", "bar"]'></div>
然后我希望根据它中有"foo"
的事实来选择它。不过,我不确定我是怎么做的。如果我不采用这种方法,我知道我会$('div[data-my-series="foo"]')
,但是,显然事实并非如此。有什么建议吗?
编辑:另外,我怎样才能实现这个的反转?即,在"foo"
中选择不具有data-my-series
的元素?
答案 0 :(得分:3)
$( "[data-my-series*='foo']" )
这里你去!
答案 1 :(得分:3)
最简单的方法与你正在做的非常相似,只需使用Attribute Contains Selector而不是equals选择器:$('div[data-my-series*="foo"]')
您可以在此处查看更多相关信息: http://api.jquery.com/attribute-contains-selector/
编辑:
要回答下面的评论,你可以在jQuery中分层选择器,所以看一下“:not()”选择器。用法为$('div:not([data-my-series*="foo"])')
。
确保您没有将div
放在:not
内。此外,您可能还希望在[data-my-series]
之外添加:not
,以确保您只选择具有该数据属性的div。
最终产品:
$('div[data-my-series]:not([data-my-series*="foo"])')
答案 2 :(得分:1)
小心。接受的答案将进行子串匹配,并可能导致您没有意图的匹配。
$('[data-my-series*="foo"]')
不仅会找到<div data-my-series="foo">
,还会在结果中包含<div data-my-series="foobar">
您应该使用〜而不是*来进行全字匹配$('[data-my-series~="foo"]')
。这将导致匹配foo
但不匹配foobar
如果您想在数据字符串中使用多个单词,请使用空格分隔它们: http://api.jquery.com/attribute-contains-word-selector/