获取正确的节点

获取正确的节点

问题描述:

我有这样的结构,我的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。

+0

你写:'parentNode.ParentNode.getElementsByTagName(“格”);'除了parentNode'的'错误的资本,我不知道你调用哪个节点的'parentNode'属性。 – 2010-05-03 18:59:07

+0

对不起,错字。我打电话给第一个输入的parentNode。 – YsoL8 2010-05-03 19:02:38

+0

我不清楚你想要什么。当“伦敦”复选框触发事件(“从第一个复选框”不清楚)时,您是否尝试获取'div class =“innerpost”'节点? – 2010-05-03 19:02:56

首先,我认为这将是最简单的只是把一个ID所需的DIV,然后说document.getElementById('divId')

但是,如果你想要做你的方式,你也许可以先检查nodeName财产,以确保您的活动真正被称为输入,而不是标签,然后检查parentNode.nodeName调试此等

+0

我很想去,但我正在动态生成表单,并且最终会得到具有相同ID的多个div。我想我可以给类名添加数字,并尝试从给定的复选框中调用div id。不确定。 – YsoL8 2010-05-03 19:16:49

+1

你想增加ID,而不是类名。我们以前做过这种事情。 “伦敦”复选框可能是id =“city_18”,div可能是'div class =“innerpost”id =“inner_18”>' 然后,我们在下划线上分割出城市的ID为18,然后'getElementById(“inner _”+ cityId)' – 2010-05-03 19:26:03

+0

编号需要从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/

+0

否因为(如果我理解正确)他试图从div – 2010-05-03 19:08:10

+0

以外的复选框获得div据我所知,选择了表单元素。我在伦敦投入之后紧接着div,而不是父母。 – YsoL8 2010-05-03 19:12:10

+0

对不起。我会尽力找到一个正确的解决方案。 – Vincent 2010-05-03 19:32:48

使用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); 
+0

我看不到正确的课程6个下一个同级 – YsoL8 2010-05-03 19:27:04