使用单个类名称上的“开始”select器

如果我有以下情况:

<div class="apple-monkey"></div> <div class="apple-horse"></div> <div class="cow-apple-brick"></div> 

我可以使用下面的select器来查找前两个DIV:

 $("div[class^='apple-']") 

但是,如果我有这个:

 <div class="some-other-class apple-monkey"></div> <div class="apple-horse"></div> <div class="cow-apple-brick"></div> 

它只会find第二个DIV,因为第一个div的类是以string的forms返回的(我想)并不真正以“apple-”开头,而是“some-”

一种方法是不使用开始,而是包含:

 $("div[class*='apple-']") 

这个问题是它也会在我的例子中select第三个DIV。

问题:通过jQuery,在各个类名上使用谓词select器的正确方法是什么,而不是整个类属性作为string? 这只是一个抓CLASS的问题,然后将其分成一个数组,然后用正则expression式循环每个单独的一个? 还是有一个更优雅/不太详细的解决scheme?

以“apple-”开头的类加上包含“apple-”的类

 $("div[class^='apple-'],div[class*=' apple-']") 

我build议让“苹果”是自己的课程。 如果可以的话,你应该避免开始与/结束,因为能够select使用div.apple会快很多。 这是更优雅的解决scheme。 如果使任务更简单/更快,不要害怕把事情分成单独的类。

尝试这个:

 $("div[class]").filter(function() { var classNames = this.className.split(/\s+/); for (var i=0; i<classNames.length; ++i) { if (classNames[i].substr(0, 6) === "apple-") { return true; } } return false; }) 
 <div class="apple-monkey"></div> <div class="apple-horse"></div> <div class="cow-apple-brick"></div> 

在这种情况下,作为问题Josh Stodola答案是正确的以“apple-”开头的类加上包含“apple-”的类

 $("div[class^='apple-'],div[class*=' apple-']") 

但如果元素有这样的多个类

 <div class="some-class apple-monkey"></div> <div class="some-class apple-horse"></div> <div class="some-class cow-apple-brick"></div> 

那么Josh Stodola的解决scheme将不起作用
为此必须做一些这样的事情

 $('.some-parent-class div').filter(function () { return this.className.match(/\bapple-/);// this is for start with //return this.className.match(/apple-/g);// this is for contain selector }).css("color","red"); 

可能会帮助别人谢谢

这是用于前缀

$("div[class^='apple-']")

这是开始,所以你不需要在那里有' – '字符

$("div[class|='apple']")

你可以在这里find一些其他很酷的jQueryselect器https://api.jquery.com/category/selectors/