jQuery选择包含数组数据属性中指定项的元素

时间:2013-10-29 21:40:36

标签: javascript jquery custom-data-attribute

我有一个元素,我想提供一个包含一系列值的数据属性,即Array。然后,我希望能够根据该系列中的任何值选择它。像这样:

<div id="example" data-my-series='["foo", "bar"]'></div>

然后我希望根据它中有"foo"的事实来选择它。不过,我不确定我是怎么做的。如果我不采用这种方法,我知道我会$('div[data-my-series="foo"]'),但是,显然事实并非如此。有什么建议吗?

编辑:另外,我怎样才能实现这个的反转?即,在"foo"中选择具有data-my-series的元素?

3 个答案:

答案 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/