当元素具有多个类时,使用jQuery查找特定类的元素

37

我正在处理一个由后端团队没有好好考虑的事情,这让我得到了一个充满 div 元素的文档。

我的做法是回退到我需要点击的元素,获取其父容器,然后在父容器内查找 class="alert-box warn", class="alert-box dead" 等具有相应类名的元素。实际上,我试图在每个元素上使用多个类选择器。当我尝试查找只有 alert-box 的时候似乎不能正常工作。我猜测是因为它还带有 warndeadfine 等其他类名。

我该如何仅查找 alert-box* 或等同于通配符概念的内容?


3
你能发布一份你的HTML标记样本吗? - Frédéric Hamidi
5个回答

74
你可以像这样组合选择器
$(".alert-box.warn, .alert-box.dead");

或者,如果您想使用通配符,请使用属性包含选择器

$("[class*='alert-box']");

注意:最好在使用上述选择器时,您要知道元素类型或标记。知道标记可以使选择器更加高效。

$("div.alert-box.warn, div.alert-box.dead");
$("div[class*='alert-box']");

我建议使用第一个选择器而不是后面的那个。 - Bojangles
1
如果你对确保元素的类名以"alert-box"开头而不仅仅是包含"alert-box"感兴趣,你也可以将"*="替换为"^="。 - Carvell Fenton
我刚刚发布了一个示例jsfiddle https://jsfiddle.net/frxyqzw3/2/,展示了类*的概念。 - Shadi

11

你可以这样选择具有多个类的元素:

$("element.firstClass.anotherClass");

只需将下一个类连接到第一个类上,不需要空格(空格表示“子元素”)。


5
var divs = $("div[class*='alert-box']");

3
一个元素可以有多个 className,但只能有一个 class 属性;jQuery 只会读取第一个。使用你发布的代码,$(".alert-box.warn") 可以工作,但 $(".alert-box.dead") 不能工作。

浏览器甚至jQuery只会读取第一个class =""属性。 - Bojangles
这就是我想通过这个答案传达的观点,难道不够清晰吗? - Kevin B
我只是想澄清一下,由于浏览器的HTML解析器忽略它们,jQuery实际上不会看到任何进一步的class ="" - Bojangles

0

5
不,他不是要根据元素是否有类来查看他所拥有的元素是否有类,而是要根据它们所属的类来选择元素。 - Bojangles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接