3

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

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

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

编辑:另外,我怎样才能做到这一点?即,选择其中没有元素?"foo"data-my-series

4

3 回答 3

3
$( "[data-my-series*='foo']" )

给你!

于 2013-10-29T21:44:43.300 回答
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"])')

于 2013-10-29T21:46:35.420 回答
2

小心。接受的答案将进行子字符串匹配,并可能导致您不想要的匹配。

$('[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/

于 2015-04-01T03:20:06.737 回答