当前位置: 首页 > 图文教程 > 网络编程 > Javascript > JS教程:childNodes与parentNode

Javascript
Jquery实战_读书笔记2 选择器
JQuery 确定css方框模型(盒模型Box Model)
jQuery 入门级学习笔记及源码
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
JavaScript 学习笔记(十四) 正则表达式
JQuery 操作Javascript对象和数组的工具函数小结
用JS写的一个TableView控件代码
JQuery 1.4 中的Ajax问题
window.onbeforeunload方法在IE下无法正常工作的解决办法
优化javascript的执行速度
jQuery 1.4 15个你应该知道的新特性(译)
js 模拟实现类似c#下的hashtable的简单功能代码
setTimeout与setInterval在不同浏览器下的差异
php gethostbyname获取域名ip地址函数详解
JavaScript 未结束的字符串常量常见解决方法
document.getElementById为空或不是对象的解决方法
javascript中利用数组实现的循环队列代码

Javascript 中的 JS教程:childNodes与parentNode


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 94 ::
收藏到网摘: n/a

如果你是高手,对于childNodes与parentNode并不陌生。其实他们就是DOM的两个特性/方法而以。

childNodes:表示对象的所有子节点的列表,返回的值可以看作是一个数组,他具有length属性;

parentNode:表示对象的父级节点。

当我解释完这两个方法以后,可能有人会问,他们有什么用,嘿嘿,当然有用,我们下面有一个例子来说明他们的作用。

如果我们有一个ul列表,大家都知道ul中只能放li标签,但是li标签中我们还可以放入ul,那么这个ul中必然就有li,但是我现在有一个要求就是我想为第一个ul下面的第一级li鼠标移上去的时候加一个样式,这样一个需求我们应该怎么做呢?请看效果及代码:

   <ul id="abc">
      <li id="ccc"><ul>
         <li id="ddd">aaa</li>
         <li>aa</li>
         <li>dd</li>
         <li>dd</li>
         <li>dd</li>
      </ul></li>
      <li>das</li>
      <li>dadf</li>
      <li>dsaf</li>
      <li>sdafu <ul>
         <li>adfsaf</li>
         <li>sdaf</li>
         <li>sdaf</li>
         <li>asdf</li>
         <li>sfa</li>
      </ul> </li>
      <li>aa</li>
   </ul>
<script  type="text/javascript">
<!--
(function() {
   var ulList = document.getElementById("abc");
   var ulListChild = ulList.childNodes;
   for (var i=0; i<ulListChild.length; i+=1) {
      ulListChild[i].onmouseover = function() {
      this.style.border = "1px solid #ccc;";
      }
   }
})();
//-->
</script>

当然这段代码的效果并不好,我只是想说明的是,childNodes是获取到的是id为abc的ul下的第一级li,我们以鼠标移到li上,鼠标加上边框的时候可以看出,当我们鼠标移到li下ul下的li时,并没有加上边框。下面我们可以用另外一串代码来查看效果:

   <ul id="abc">
      <li id="ccc"><ul>
         <li id="ddd">aaa</li>
         <li>aa</li>
         <li>dd</li>
         <li>dd</li>
         <li>dd</li>
      </ul></li>
      <li>das</li>
      <li>dadf</li>
      <li>dsaf</li>
      <li>sdafu <ul>
         <li>adfsaf</li>
         <li>sdaf</li>
         <li>sdaf</li>
         <li>asdf</li>
         <li>sfa</li>
      </ul> </li>
      <li>aa</li>
   </ul>
<script  type="text/javascript">
<!--
(function() {
   var ulList = document.getElementById("abc");
   var ulListChild = ulList.childNodes;
   alert(ulListChild.length);
   for (var i=0; i<ulListChild.length; i+=1) {
      for (var j=0; j<ulListChild[i].childNodes.length; j+=1 ) {
         for (var k=0; k<ulListChild[i].childNodes[j].childNodes.length; k+=1) {
             ulListChild[i].childNodes[j].childNodes[k].onmouseover = function() {
                this.style.border = "1px solid #ccc;";
             }
         }
      }
   }
})();
//-->
</script>

我的写法就已经相当复杂了,因为我也是菜鸟,我也是初学者,只是想说明一个事情而以。

我们可以看到一个代码块中是ID为abc的子元素,而第二个代码块却是第一级li下面的li加上了边框。

我们在来看看他们的关系,也就是parentNode方法。请查看效果:

   <ul id="abc">
      <li id="ccc"><ul>
         <li id="ddd">aaa</li>
         <li>aa</li>
         <li>dd</li>
         <li>dd</li>
         <li>dd</li>
      </ul></li>
      <li>das</li>
      <li>dadf</li>
      <li>dsaf</li>
      <li>sdafu <ul>
         <li>adfsaf</li>
         <li>sdaf</li>
         <li>sdaf</li>
         <li>asdf</li>
         <li>sfa</li>
      </ul> </li>
      <li>aa</li>
   </ul>
<script  type="text/javascript">
<!--
(function() {
   var ulList = document.getElementById("abc");
   var ulListLi = document.getElementById("ccc") ;
   var ulListLiLi = document.getElementById("ddd") ;
   alert(ulListLi.parentNode === ulList);//true
   alert(ulListLiLi.parentNode === ulList);//false
   alert(ulListLiLi.parentNode === ulListLi.childNodes[0]);//true
})();
//-->
</script>

不难看出他们之间的关系,ulListLi.childNodes[0]这里代表的是id为ccc下面的第一个元素,其实这里也可以写成firstChild,嘿嘿,以后在说这个方法。

注意:火狐在获取childNodes的时候,在计算上有一些特别。