0

私はこの機能を見つけました:

document.getElementsByClassName = function(c){
    for(var i=0,a=[],o;o=document.body.getElementsByTagName('*')[i++];){
        if(RegExp('\\b'+c+'\\b','gi').test(o.className)){
            a.push(o);
        }
    }

    return a;
}

クラスごとにすべての要素を非表示にするにはどうすればよいですか?

私は試した:

var array = document.getElementsByClassName("hide");

for(var i = 0; i < array.length; i++)
{
    $(array[i]).hide();
}

しかし、私はエラーが発生しました:

Could not convert JavaScript argument arg 0 [nsIDOMWindow.getComputedStyle]
4

3 に答える 3

4

jQueryを使用すると、CSSセレクターを使用できるため、手作りのループや正規表現が不要になります。fooeyクラスで要素を非表示にするには、

$('.fooey').hide();
于 2012-05-08T19:45:12.067 に答える
2

バニラJavaScriptを使用している場合は、次のようにします。

var array = document.getElementsByClassName("hide");

for(var i = 0; i < array.length; i++)
{
    array[i].style.display = 'none';
    array[i].onclick = function(){
        // do stuff
    };
    /* or:
    array[i].addEventListener('click',functionToCall);
    */
}

しかし、jQueryを使用していることを考えると、なぜ自分で物事を複雑にしているのかわかりません。次を使用してください。

$('.hide').hide();

上記に加えて、あなたのコメントを与えられて:

要素ごとにイベント「クリック」を追加する必要があるためです。

単に使用してください:

$(elementSelector).click(
    function(){
        // do stuff
    });

同じ要素を非表示にしてクリックイベントをバインドするとします。

$('.hide').hide().click(
    function(){
        // do stuff
    });
于 2012-05-08T19:45:27.670 に答える
2

取得するgetElementsByClassNameのは配列ではなくNodeList、したがって、ループしようとするとエラーになります。

ただし、以下を使用してNodeListをループすることはできます。

var nodeList = document.getElementsByClassName("hide");
for(var x in nodeList){}
于 2012-05-08T19:45:36.827 に答える