私はサブカテゴリとサブカテゴリのリストを持つカテゴリリストのコントロールをしようとしています。同じクラスの要素で発生する1つの関数
<ul class="selectbox-ul">
<li>
<div>Category</div>
<ul class="selectbox-ul-child">
<li>
<div>Subcategory</div>
<ul class="selectbox-ul-child">
<li>
<div>Sub-subcategory</div>
</li>
</ul>
<span id="trigger">icon</span>
</li>
</ul>
<span id="trigger">icon</span>
</li>
....
</ul>
だから私のショットul.selectbox-UL-子供のためのクラスを追加しました:
var trigger = document.getElementById("trigger");
function subCatStatus() {
if(this.parentElement.children[1].className != "... expanded") {
this.parentElement.children[1].className += " expanded"
} else {
this.parentElement.children[1].className == "..."
};
};
trigger.addEventListener("click", subCatStatus);
そして、それは最初スパン#トリガーに対してのみ機能(
はここHTMLですサブカテゴリを表示する)、次のサブカテゴリは何もしません(私はまた、.getElementsByClassNameを使用しようとしましたが、トリガーのいずれにも機能しませんでした)。だから私はいくつかの説明をしたいのですが、なぜこれは動作しません。そしてそれを働かせる方法についてのアドバイス。
IDは一意であると想定されるため、1つの '#trigger 'しか持たないようにしてください。 – Musa
同じIDを持つ要素を多数持つべきではありません。クラス名などの別のセレクタを使用して、一致する要素を繰り返しイベントリスナーを追加する必要があります –
**なぜ同じIDを持つ2つの要素が悪いのですか?無効なHTML以外は[** getElementById **](https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementById)は、HtmlCollectionではなく、単一の要素を返します。つまり、渡された最初の要素が返されます。 – Nope