为什么我不能正确获取这个div元素的childNodes?

时间:2011-12-08 08:05:00

标签: javascript html

我正在尝试获取div元素的所有子元素(下面的代码),以便创建一个机制,在没有选中任何子元素时取消选中父元素。所有的孩子都在同一个div中但是当我使用div.childNodes [0]时,例如我得到一个Object Text元素而不是Div元素。

html代码:

<div id="div_chk_ctl_adaugare" style="width: 100%; border: 0; padding: 0; background-color: white;">
            <div style="width: 99.5%-10px; border: 0; padding-left: 10px; background-color: white;">
                <input class="chck_nivel2_adaugare" id="chk_ctl_adaugare_conturi" name="chk_ctl_adaugare_conturi" type="checkbox" onChange="check_conturi_actiuni(\'adaugare\');" /><label for="pm_conturi_adaugare"><img id="pm_conturi_adaugare" name="plus" src="crm/imagini/plus-10.png" cursor="pointer"></img> Conturi </label>
            </div> 
                <div id="div_dir_conturi_adaugare" style="width: 100%; border: 0; padding: 0; background-color: white;">
                    '.$div_dir_conturi.'
                </div>
            <div style="width: 99.5%-10px; border: 0; padding-left: 10px; background-color: white;">
                <input class="chck_nivel2_adaugare" id="chk_ctl_adaugare_contacte" name="chk_ctl_adaugare_contacte" type="checkbox" onChange="check_contacte_actiuni(\'adaugare\');" /><label for="pm_contacte_adaugare"><img id="pm_contacte_adaugare" name="plus" src="crm/imagini/plus-10.png" cursor="pointer"></img> Contacte </label>
            </div> 
                <div id="div_dir_contacte_adaugare" style="width: 100%; border: 0; padding: 0; background-color: white;">
                    '.$div_dir_contacte.'
                </div>
</div>

使用Javascript:

var div_col = document.getElementById("div_chk_ctl_"+tip);
//alert(div_col.childNodes[0].data);
var uncheck_tate = 1;
for(var j = 0; j<div_col.childNodes.length; j+=2) {
    alert(div_col.childNodes[j]);
    if(div_col.childNodes[j].childNodes[0].checked == true) {
        uncheck_tate = 0        
    }
}

if(uncheck_tate == 1)
    document.getElementById("chk_ctl_"+tip).checked = false;
else
    document.getElementById("chk_ctl_"+tip).checked = true;

未注释的警报打印[对象文本]。 我在这里找不到关于childNodes的东西吗?我可以使用其他任何东西吗?

2 个答案:

答案 0 :(得分:1)

为了避免使用这样的文本节点,元素之间没有任何空格:(该空间是您看到的文本节点)

<div id="div_chk_ctl_adaugare" style="width: 100%; border: 0; padding: 0; background-color: white;"><div style="width: 99.5%-10px; border: 0; padding-left: 10px; background-color: white;"><input class="chck_nivel2_adaugare" id="chk_ctl_adaugare_conturi" name="chk_ctl_adaugare_conturi" type="checkbox" onChange="check_conturi_actiuni(\'adaugare\');" /><label for="pm_conturi_adaugare"><img id="pm_conturi_adaugare" name="plus" src="crm/imagini/plus-10.png" cursor="pointer"></img> Conturi </label></div>.....

如果您希望具有可读HTML,只需检查节点类型:

if (div_col.childNodes[j].nodeType != 3) {
    //not text node, OK to go...
}

答案 1 :(得分:0)

如果您希望所有输入都是元素的后代,而不仅仅是直接子元素,请使用 getElementsByTagName

var div_col = document.getElementById("div_chk_ctl_"+tip);
var inputs = div_col.getElementsByTagName('input');

for (var i=0, iLen=inputs.length; i<iLen; i++) {
  // do stuff with inputs[i]
}