0

SOで答えを探していましたが、正解が得られないか、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クラスが存在する場合は要素を非表示にし、そうでない場合は要素を表示します。

どうもありがとう

4

3 に答える 3

2

正規表現をタグ自体と照合しようとしています。代わりに、これを行う必要があります。

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

さらに、は要素ではなく配列であるdivs.className === "targets"ため、チェックも機能しません。そのステートメントをdivs削除します。if

于 2012-08-17T17:11:08.537 に答える
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,' ');
    }
}

コードがお役に立てば幸いです。

于 2012-08-17T17:16:51.733 に答える
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 );
    }
}
于 2016-05-17T17:51:19.943 に答える