我一直在寻找答案,但我没有得到一个直接的答案,或者他们是针对JavaScript以外的语言。我想使用正则表达式在类列表中查找类名。
例如,我有这个HTML,我想检查它是否在类列表中的某个地方有hidden
类:
<div class="target box hidden"></div>
我正在使用这个JS代码,但它不起作用:
// ON CLICK DO THE BELOW:
var divs = document.getElementsByTagName('div'),
re = /\bhidden\b/gi, //here's the regEx
i;
for (i = 0, max = divs.length; i < max; i += 1) {
if (divs.className === 'targets') {
var targets = divs[i];
if (targets.match(re)) {
targets.replace('hidden', '');
} else {
targets.className = 'target box hidden';
}
}
}
基本上,我想做一个显示/隐藏功能,即如果hidden
类存在则隐藏元素,否则显示元素。
非常感谢
答案 0 :(得分:2)
您正在尝试将正则表达式与标记本身进行匹配。相反,你应该这样做:
if( targets.className.match(re))
targets.className = targets.className.replace('hidden','');
此外,您的divs.className === "targets"
检查也无效,因为divs
是一个数组,而不是一个元素。删除if
语句。
答案 1 :(得分:2)
function hasClass(ele,cls) {
return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}
function addClass(ele,cls) {
if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}
function removeClass(ele,cls) {
if (hasClass(ele,cls)) {
var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
ele.className=ele.className.replace(reg,' ');
}
}
希望代码可以提供帮助。
答案 2 :(得分:0)
为什么不切换课程,这里是我在所有插件上使用的片段,就像一个魅力:
var s = {
hasClass: function( elem, classname ) {
var reg = new RegExp( "(^|\\s+)" + classname + "(\\s+|$)" );
console.log(elem);
return elem && reg.test( elem.className );
},
addClass: function( elem, classname ) {
if( elem && !s.hasClass( elem, classname ) ) {
elem.className += " " + classname;
}
},
removeClass: function( elem, classname ) {
var reg = new RegExp( "(^|\\s+)" + classname + "(\\s+|$)" );
elem && ( elem.className = elem.className.replace( reg, " " ) );
},
toggleClass: function( elem, classname ) {
var fn = s.hasClass( elem, classname ) ? "remove" : "add";
s[ fn + "Class" ]( elem, classname );
}
}