【发布时间】:2011-09-23 18:54:52
【问题描述】:
在这种情况下,我有一系列列表项,每个列表项都有一个对应的内容区域。单击列表项时,会操作相应的内容区域(即,如果单击第一个列表项,则将操作第一个内容部分)。
<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,例如“li1”、“li2”等以及“section1”、“section2”等。然后我会解析整数关闭被点击元素的 id 并操作相应的部分。
有没有办法在不需要额外的 id 属性的情况下确定这一点?例如,如果我单击第 3 个列表项并知道这是第 3 个,我可以使用 document.querySelector('div:nth-child(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 位置。
欢迎使用仅限浏览器的现代解决方案。
【问题讨论】:
标签: javascript html dom-events