HTML DOM childNodes的疑问

baidu_16688639 2014-06-19 05:10:46
<td id="mytd3">
<input maxlength="3" >
<input>
<input>
</td>

var nodes=document.getElementById("mytd3").childNodes
alert(nodes.length);
for(var i=0;i<nodes.length;i++){
alert(nodes[i].nodeName+" "+nodes[i].nodeValue);
}

length会弹6,弱弱的问下,childNodes是返回子节点的列表,里面有3个input标签,那么为什么不弹3,3个元素节点。但测试是弹6。难道是会算了input的默认属性节点type="text",那么就刚好6个倒可以解释通,但是我顺手又就加了个maxlength属性。为什么不弹7呢?对于这个有点疑问,请知道的朋友帮忙解答下!谢谢
...全文
326 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cb1156 2014-06-21
  • 打赏
  • 举报
回复
2楼正解。 LZ没理解节点,childnodes在不同浏览器下的结果也是不一样的。就是不同浏览器对节点处理不一样。 maxlength是节点元素属性。不是节点。
小小码世界 2014-06-20
  • 打赏
  • 举报
回复
这是典型的javascript的闭包问题。 可以谷歌下关键词”JavaScript闭包 for 循环“ 一搜遍知。 http://blog.csdn.net/helpzp2008/article/details/32730707
bbjbepzz 2014-06-20
  • 打赏
  • 举报
回复
如果你只要元素节点的话,把childNodes改成children就行了。
xuzuning 2014-06-20
  • 打赏
  • 举报
回复
<td id="mytd3">
       <input maxlength="3" >
       <input>
       <input>
</td>
INPUT null #text INPUT null #text INPUT null #text
<td id="mytd3">
<input maxlength="3" ><input><input></td>
INPUT null INPUT null INPUT null
<td id="mytd3">
a<input maxlength="3" >b<input>c<input></td>
</tr>
#text a INPUT null #text b INPUT null #text c INPUT null
sagegz 2014-06-20
  • 打赏
  • 举报
回复
还有种结点叫做文本结点(TextNode),试试这个你就明白了。

<table>
        <td id="mytd3"><input maxlength="3" ><input><input></td>
</table>
以上结果是3,因为这次就没有文本结点了。有一个空格就会有一个文本结点。
zgrmghghg 2014-06-19
  • 打赏
  • 举报
回复
引用 3 楼 baidu_16688639 的回复:
我的意思是为什么 <td id="mytd3"> <input maxlength="3" > <input> <input> </td> var nodes=document.getElementById("mytd3").childNodes alert(nodes.length); } 会是返回节点长度是6; <tr id="tr1"> <td></td> <td></td> <td></td> </tr> var nodes=document.getElementById("tr1").childNodes alert(nodes.length); } 返回的节点长度是3 是否是在调用childNodes的时候会返回了input标签的默认属性 type="text" 属性节点,如果是这样为什么不返回maxlength节点,这是我的疑问点。好了我先去看看那个是不是input标签的默认属性 type="text" 属性节点
行与行之间的空白也会算成是节点的
baidu_16688639 2014-06-19
  • 打赏
  • 举报
回复
我的意思是为什么 <td id="mytd3"> <input maxlength="3" > <input> <input> </td> var nodes=document.getElementById("mytd3").childNodes alert(nodes.length); } 会是返回节点长度是6; <tr id="tr1"> <td></td> <td></td> <td></td> </tr> var nodes=document.getElementById("tr1").childNodes alert(nodes.length); } 返回的节点长度是3 是否是在调用childNodes的时候会返回了input标签的默认属性 type="text" 属性节点,如果是这样为什么不返回maxlength节点,这是我的疑问点。好了我先去看看那个是不是input标签的默认属性 type="text" 属性节点
seerful 2014-06-19
  • 打赏
  • 举报
回复
你对子节点的理解不对,你可以参照http://www.w3school.com.cn/htmldom/dom_nodes.asp
seerful 2014-06-19
  • 打赏
  • 举报
回复
IE以外的浏览器创建 DOM 树时生成些空白字符,相当于空白的文本节点,测试的话可以通过nodeType查看下node类型,1表示元素节点,2是属性节点,3是文本节点

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧