jquery 如何从另一个选择器的结果中获得具有特定前缀的类列表?

uemypmqf  于 2022-12-29  发布在  jQuery
关注(0)|答案(2)|浏览(116)

我有一个选择器,它根据特定条件获取所有元素:

let elements = $("...");

这将产生一个元素列表,其中一个元素的类具有相同的前缀:
some_class_1some_class_2等等。
然后我想隐藏所有具有相同类的元素:
some_class_1extrasome_class_2extra
为此,我想提取所有带有这个特定前缀的类,然后迭代它们,添加额外的文本,并为每个类选择我想隐藏的元素。
我该怎么做呢?
以下操作不起作用:

let classes =  elements.map(function() {
                return (this.className.match(/some_class\d+/) || []).pop();
            }).get();
enxuqcxy

enxuqcxy1#

使用带有小正则表达式的classNameString.prototype.replace()匹配特定的类字符串前缀,并将匹配替换为相同的匹配 * 和 * 所需的后缀。
在本例中,我添加了_extra作为后缀,因为在CSS中选择它更容易:)

document.querySelectorAll('[class^="some_class_"], [class*=" some_class_"]').forEach(el => {
  el.className = el.className.replace(/\b(some_class_\d+)\b/, "$1_extra");
});
/* Target classes by prefix: */
[class^="some_class_"], [class*=" some_class_"] {
  background: red;
}

/* Target classes by suffix: */
[class*="_extra "], [class$="_extra"] {
  background: gold;
}
<div class="box some_class_1 cell">one</div>
<div class="box some_class_2 demo">two</div>
t30tvxxf

t30tvxxf2#

请尝试这样做。您可以使用$('*[class^="some_class"]')选择所有包含some_class文本的类。

$('*[class^="some_class"]').each((index, item) => $(item).attr('class', `${$(item).attr('class')}extra`));

相关问题