获取正确的节点
我有这样的结构,我的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>
我需要一种方法来选择的第一个复选框股利。就像
parentNode.parentNode.getElementsByTagName("div");
但我没有得到它的权利 - 特定的行选择一个父母上面我需要的所有div。
首先,我认为这将是最简单的只是把一个ID所需的DIV,然后说document.getElementById('divId')
。
但是,如果你想要做你的方式,你也许可以先检查nodeName
财产,以确保您的活动真正被称为输入,而不是标签,然后检查parentNode.nodeName
调试此等
我很想去,但我正在动态生成表单,并且最终会得到具有相同ID的多个div。我想我可以给类名添加数字,并尝试从给定的复选框中调用div id。不确定。 – YsoL8 2010-05-03 19:16:49
你想增加ID,而不是类名。我们以前做过这种事情。 “伦敦”复选框可能是id =“city_18”,div可能是'div class =“innerpost”id =“inner_18”>' 然后,我们在下划线上分割出城市的ID为18,然后'getElementById(“inner _”+ cityId)' – 2010-05-03 19:26:03
编号需要从0还是1开始? – YsoL8 2010-05-03 19:37:34
得到了解决方案!
var div = element.parentNode.nextSibling.nextSibling;
while (!div.tagName) div = div.nextSibling;
第二行是需要的,因为IE不计算文本节点,但是其他浏览器可以。
测试请参阅本的jsfiddle:http://jsfiddle.net/SLjXW/
使用ID将是最简单的(正如Tim Goodman所说的),但是如果你不能(生成DOM,不知道ID)我会通过兄弟节点而不是父母循环。 沿东西的(伪代码)行:
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);
我看不到正确的课程6个下一个同级 – YsoL8 2010-05-03 19:27:04
你写:'parentNode.ParentNode.getElementsByTagName(“格”);'除了parentNode'的'错误的资本,我不知道你调用哪个节点的'parentNode'属性。 – 2010-05-03 18:59:07
对不起,错字。我打电话给第一个输入的parentNode。 – YsoL8 2010-05-03 19:02:38
我不清楚你想要什么。当“伦敦”复选框触发事件(“从第一个复选框”不清楚)时,您是否尝试获取'div class =“innerpost”'节点? – 2010-05-03 19:02:56