使用单个类名称上的“开始”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/