Javascript 获取正确的节点

Javascript 获取正确的节点,javascript,dom,Javascript,Dom,我的dom中有以下结构: <label>London<input type="checkbox" name="London"></label><br> <div class="innerpost"> <label>N1 2AB<input type="checkbox" name="N1 2AB"></label><br> <label>E1 1AB<input type

我的dom中有以下结构:

<label>London<input type="checkbox" name="London"></label><br>
<div class="innerpost">
<label>N1 2AB<input type="checkbox" name="N1 2AB"></label><br>
<label>E1 1AB<input type="checkbox" name="E1 1AB"></label><br>
</div>
但我没有弄对-这一行选择了所有的div,其中一个父级比我需要的父级高。

找到了解决方案

var div = element.parentNode.nextSibling.nextSibling;
while (!div.tagName) div = div.nextSibling;
第二行是必需的,因为IE不计算文本节点,但其他浏览器会计算


查看此JSFIDLE进行测试:

首先,我认为最简单的方法是在所需的div上放置一个id,然后说
document.getElementById('divId')


但是,如果您想按自己的方式进行调试,您可能可以先检查
nodeName
属性,以确保您的事件确实是在输入端而不是标签上调用的,然后检查
parentNode.nodeName
,等等。

使用ID将是最简单的(正如Tim Goodman所说的),但如果您不能这样做的话(生成的DOM,不知道ID吗?)我会循环通过同级节点,而不是父节点。 类似于(伪代码)的东西:


您可以编写:
parentNode.parentNode.getElementsByTagName(“div”);
除了错误地将
parentNode
大写外,我不确定您调用的是哪个节点的
parentNode
属性。很抱歉输入错误。我正在调用第一个输入的parentNode。我不清楚您想要什么。您是否正在尝试为
div class=“innerpost”获取节点
当事件在“London”复选框上触发时(“第一个复选框”不清楚)?同样值得一提的是,如果您想使用
getElementsByTagName
获取div,您需要记住将其设置为类似
getElementsByTagName('div')[0]
否,因为(如果我理解正确的话)他试图从我所能看到的div之外的复选框中获取div,该复选框选择form元素。我在London输入之后紧跟div,而不是父项。我很乐意,但我正在动态生成表单,最终会得到多个id相同的div。我想我可以在类名和att中添加数字清空以计算给定复选框中的div id。对此不确定。您希望增加id,而不是类名。我们以前做过类似的事情。“London”复选框可能是id=“city_18”,div可能是
,然后在下划线上拆分以获得city的id 18,然后
getElementById(“internal_uu”+cityId)
编号需要从0还是1开始?Stephen P的解决方案运行顺利。感谢大家的建议!
var div = element.parentNode.nextSibling.nextSibling;
while (!div.tagName) div = div.nextSibling;
var sib = eventNode; // start at the checkbox where the event took place
var found = false;
do {
    sib = sib.nextSibling;
    // see if this is the div with class innerpost
    // it could be a textnode, you can't assume the immediate sibling is the div
    if (sib.tagName == 'DIV' && sib.className.match('innerpost') {
        found = true;
        break;
    }
} while (sib);