-2

以下のコード (またはどこか) のコンテキストで、getelementbyid 関数が複数回動作することは可能ですか? または、別の関数、またはおそらく Jquery が必要ですか?

<script type="text/javascript">
    window.onload = function() 
    {
    var test = document.getElementById('test');
    if (test) 
        {
        test.className = 'unactive';
        test.firstChild.onclick = function() 
            {
            if(this.parentNode.className == 'unactive') {
            this.parentNode.className = 'active';
            } 
            else 
                {
                this.parentNode.className = 'unactive';
                }
            }
        }
    };
</script>
4

2 に答える 2

0

ID のリストを使用して複数の要素を操作したいとします。(私が間違っていて、実際に同じ ID を持つ複数の要素を選択したい場合、ID は一意でなければならないため、悪いことをしたことになります。その場合は、代わりにクラスを使用する必要があります。)

jQuery では、 ID セレクターのコンマ区切りリスト ( など$("#foo, #bar, #baz")) を使用してこれを実現し、次のような関数を実装できます。

$("#foo, #bar, #baz").addClass("unactive")
.children(":first-child").click(function() {
    var $this = $(this);
    var $parent = $this.parent();
    $parent.toggleClass("active unactive");
});

jQuery を使用しない場合、この小さな関数は ID のリストを受け取り、ノードの配列を返します。

document.getElementsByIdList() {
    var results = [];
    for(var i=0; i<arguments.length; ++i) {
        results.push(document.getElementById(arguments[i]));
    }
    return results;
}

現在のコードで次のように使用します。

var myNodeArray = document.getElementsByIdList("foo", "bar", "baz");
for(var i=0; i<myNodeArray.length; ++i) {
    var test = myNodeArray[i];
    if(test) {
        // your code goes in here...
    }
}
于 2012-07-03T17:15:40.220 に答える
0

これを使用できます。

document.getAllById = function(id){
    if(document.all)
        return document.all[id];
    var elements = [],
    all = document.getElementsByTagName('*');
    for(var i=0;i<all.length;i++)
        if(all[i].getAttribute('id')===id)
            elements.push(all);
    return elements;
}

とにかく、@Pointyが言ったように、id属性は一意であると想定されていますが、classいくつかの共通のプロパティを持つ1つ以上の要素を定義するために使用されます

于 2012-07-03T17:36:13.373 に答える