このシナリオでは、それぞれに対応するコンテンツ領域を持つ一連のリスト項目があります。リストアイテムをクリックすると、対応するコンテンツ領域が操作される(すなわち、第1のリストアイテムがクリックされた場合、第1のコンテンツセクションが操作される)。これを行うための私のオールドスクールな方法は、私は、その後の解析しまうなど「LI1」、「LI2」などと「セクション1」、「section2の」、として、各リスト項目とセクションにIDを与えていたクリックしたときに一連の要素の要素のDOM位置を決定する方法
<ul>
<li>List item</li>
<li>List item</li>
<li>List item</li>
</ul>
<div>
<section>Content section</section>
<section>Content section</section>
<section>Content section</section>
</div>
クリックされた要素のidの整数で、対応するセクションを操作します。
余分なID属性を必要とせずにこれを判断する方法はありますか?たとえば、3番目のリストアイテムをクリックしてそのアイテムが3番目であることがわかっている場合は、document.querySelector('div:nth-child(3)')
を使用して3番目のコンテンツセクションを操作できます。私の質問は、それが最初にクリックされたシリーズの3番目の要素であることを知る方法です。
私の最初の考えソリューションは、このようなものだった:
var target = e.target;
var parent = e.target.parentNode;
for (var i in parent.childNodes) {
if (parent.childNodes[i].nodeType == 1 && parent.childNodes[i] == target) {
// found it... i+1
}
}
これは、より多くのリスト項目と内容のセクションがあった場合は特に、ただのIDを使用する場合と比較してかなり高価な操作のように思えます。私はまだ私が見つけていない正しいDOM位置を与えるノード属性があることを望んでいます。
最新のブラウザ専用ソリューションが歓迎されています。ありがとう。
あなたが特定の要素のみをカウントするコメントや 'tagName'を避けるために、' nodeType'を確認したいことがあり、カウントをインクリメントする前に。 – Prusse