如何将类选择器的其余部分存储为foreach循环的变量
例如:
<div class="sel_child1">something</div>
<div class="sel_child2">something</div>
我知道我可以使用:
jQuery( "[class^='sel_']" )
但是我需要foreach循环的其余部分,因为该类的第二部分是要定位的子元素,在您问我知道我应该使用数据属性或另一种方法之前,但我使用的CMS不会让我。
div也可能具有其他不相关的类。
答案 0 :(得分:3)
您可以使用.attr("class")
方法获取整个类字符串。从那里开始,就可以将其分为一系列类,找到以"sel_"
开头的类,然后存储第二部分。
$("[class*='sel_']").each(function() { //match all classes with sel_ in them
const child = $(this)
.attr("class") //get the class string
.split(" ") //break it into individual classes
.find(n => n.startsWith("sel_")) //find the one that starts with sel_
.split("_")[1]; //split it on _ and take the second piece
console.log(child);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="sel_child1 unrelated">something</div>
<div class="unrelated sel_child2">something</div>
还有更简洁的RegEx替代方案...
$("[class*='sel_']").each(function() {
const child = $(this).attr("class").match(/(?:^|\s)sel_([^\s]*)/)[1];
console.log(child);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="sel_child1 unrelated">something</div>
<div class="unrelated sel_child2 xsel_child3">something</div>
RegEx参考
(?:^|\s)
-字符串或的开头(非捕获)
sel_
-“ sel _”
([^\s]*)
-直到下一个空格(捕获)的所有内容