Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中查找具有正则表达式的特定单词_Javascript_Html_Regex - Fatal编程技术网

在javascript中查找具有正则表达式的特定单词

在javascript中查找具有正则表达式的特定单词,javascript,html,regex,Javascript,Html,Regex,我一直在寻找一个答案,但我没有得到一个直接的答案,或者他们的语言以外的JavaScript。我想使用正则表达式在类列表中查找类名 例如,我有这个HTML,我想检查它是否在类列表中的某个地方隐藏了类: <div class="target box hidden"></div> 我正在使用此JS代码,但它不起作用: // ON CLICK DO THE BELOW: var divs = document.getElementsByTagName('div'),

我一直在寻找一个答案,但我没有得到一个直接的答案,或者他们的语言以外的JavaScript。我想使用正则表达式在类列表中查找类名

例如,我有这个HTML,我想检查它是否在类列表中的某个地方隐藏了类

<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';
        }
    }
}
//单击执行以下操作:
var divs=document.getElementsByTagName('div'),
re=/\bhidden\b/gi,//这是正则表达式
我
对于(i=0,max=divs.length;i
基本上,我想做一个显示/隐藏功能,也就是说,如果存在
hidden
类,则隐藏元素,否则显示元素


非常感谢

您正在尝试将正则表达式与标记本身进行匹配。相反,您应该这样做:

if( targets.className.match(re))
   targets.className = targets.className.replace('hidden','');

此外,您的
divs.className==“targets”
检查也不会起作用,因为
divs
是一个数组,而不是一个元素。删除该
if
语句。

您正试图将正则表达式与标记本身匹配。相反,您应该这样做:

if( targets.className.match(re))
   targets.className = targets.className.replace('hidden','');
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,' ');
    }
}
此外,您的
divs.className==“targets”
检查也不会起作用,因为
divs
是一个数组,而不是一个元素。删除该
if
语句

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,' ');
    }
}
希望代码能有所帮助


希望代码能有所帮助。

为什么不切换类,下面是我在所有插件上使用的代码片段,非常有用:

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 );
    }
}

为什么不切换类呢?下面是我在所有插件上使用的代码片段,非常有魅力:

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 );
    }
}

if(divs.className=='targets'){
将限制您使用
class=“targets”
的元素,而不是其中一个类名为
“targets”的元素
。此外,您正在将
re
div
本身相匹配,而不是它的
className
,甚至它的
outerHTML
您更喜欢jQuery吗?使用jQuery可以很容易地做到这一点。或者您可以使用
文档。getElementsByClassName
function@Diode:
文档。不支持getElementsByTagName
d在所有浏览器中,如IE7、IE6等(您知道交易…),这就是我没有使用它的原因。
if(divs.className==='targets'){
将限制您使用
class=“targets”
的元素,而不是其中一个类名为
“targets”的元素
。此外,您正在将
re
div
本身相匹配,而不是它的
className
,甚至它的
outerHTML
您更喜欢jQuery吗?使用jQuery可以很容易地做到这一点。或者您可以使用
文档。getElementsByClassName
function@Diode:
文档。不支持getElementsByTagName
d在所有浏览器中,如IE7、IE6等(你知道交易…),这就是为什么我没有使用它。