2

「tops」、「bottoms」、「shoes」の3つの配列で構成された複数の要素を取得しようとしています。

私は私が使用して複数のオブジェクトをつかむことができることを知っています

document.getElementsByClassName("class1 class2");

これらの各オブジェクトのスタイルを変更するにはどうすればよいですか。現在のコードは次のとおりです。(可視性と不透明度の両方を試しましたが、document.getelements ....が何も返さないため、キャッチされないタイプエラーが発生し続けます。

function filter() {
var this_id = event.target.id;
console.log(this_id);
if (this_id = "filtertops") {
    document.getElementsByClassName("a4 a7 a11 a12 a8").style.visibility="hidden"; //not tops
    document.getElementsByClassName("a1 a2 a3 a5 a9 a10 a14").style.visbility="visible"; // tops
    }
else if (this_id = "filterbottoms") {
    document.getElementsByClassName("a2 a3 a5 a10 a14 a8").style.opacity="0.4"; //not bottoms
    document.getElementsByClassName("a1 a4 a7 a9 a11 a12").style.opacity="1"; //bottoms
    }
else if (this_id = "filtershoes") {
    document.getElementsByClassName("a1 a2 a3 a4 a5 a7 a9 a10 a11 a12 14").style.opacity="0.4"; //not shoes
    document.getElementsByClassName("a8").style.opacity="1"; //shoes
    }

それらを変数にも割り当ててから、forループを割り当てて各オブジェクトのスタイルを変更しようとしましたが、どちらも機能しませんでした。

function filterbottoms() {
    var nonbottom = document.getElementsByClassName("a2 a3 a5 a10 a14 a8");
    var bottoms = document.getElementsByClassName("a1 a4 a7 a9 a11 a12");
    for (i in bottoms)
        {
            i.style.visibility='visible';
        }
    for (i in nonbottom)
        {
            i.style.visibility='hidden';
        } 

}
4

1 に答える 1

4

forあなたはループに近かった:

for (i in bottoms){
    bottoms[i].style.visibility='visible';
}

動作するはず<edit>ですが、動作しません</edit>。各反復iでは、次のではなく、次のキーです。

ただし、forではなく従来の を使用する必要がありfor..inます。

for (var i = 0; i < bottoms.length; i++){
    bottoms[i].style.visibility='visible';
}

編集:(特定のオブジェクトに応じて)非数値プロパティを反復処理するため、配列または配列のようなオブジェクトには一般的にfor使用が適切ではないため、従来のループをお勧めしました。for..inジョセフのコメントは、この場合、for..inその理由で a が確実に機能しないことを確認しています。

于 2012-10-24T09:58:09.477 に答える