我使用removeClass函数并向其传递一个回调,以删除与部分名称匹配的类
以下是我的代码
$('.target').removeClass(function (index, className) {
return (className.match(/(^|\s)bg_\S+/g) || []).join(' ');
});我想要做的是删除所有以bg_开头的类和任何数量的其他可能的匹配项。
我试过了
$('.target').removeClass(function (index, className) {
return (className.match(/(^|\s)bg_\S+/g|/(^|\s)ag_\S+/g) || []).join(' ');
});删除所有以“bg”和“ag”开头的内容,但都不起作用。
我很感谢你的帮助,谢谢。
发布于 2018-04-13 07:32:21
嗯,你可以试试这个。
function removeClasses(){
var classes = $(".target").attr("class").split(' ');
console.log("Before removing: ",$(".target").attr("class"))
classes.forEach(e=> {
var flag = e.substring(0, 3);
if(flag === "AND" || flag.substring(0, 2) === "ag" || flag.substring(0, 2) === "bg"){
$(".target").removeClass(e)
}
})
console.log("After removing: ",$(".target").attr("class"))
}<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="target bgAA AA ANDse agEF FF"></div>
<button onclick="removeClasses()">Remove</button>
发布于 2018-04-13 07:59:45
不是尝试将整个类名与regexp匹配,而是将其拆分成单独的类,然后过滤该数组。
$(".target").removeClass((i, className) => {
var classList = className.split(" ");
return classList.filter(class => /^(bg_|ag_)/.test(class)).join(" ");
});发布于 2018-04-14 00:48:51
这是我在您的帮助下编写的包装器解决方案。
// Wrapper for JQuery removeClass - pass a collection of elements and your own regex. This will strip out any classes matching the regex
var removeClassesByPartialMatch = function (targets, regex) {
regex = new RegExp(regex);
targets.removeClass((i, classes) => {
var classes = classes.split(' ');
return classes.filter(name => regex.test(name)).join(' ');
});
}https://stackoverflow.com/questions/49807095
复制相似问题