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

Javascript
jQuery生成asp.net服务器控件的代码
javascript 实现的完全兼容鼠标滚轴缩放图片的代码
JavaScript学习笔记(十七)js 优化
使用SyntaxHighlighter实现HTML高亮显示代码的方法
javascript contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
利用jQuery 实现GridView异步排序、分页的代码
jquery.lazyload 实现图片延迟加载jquery插件
Lazy Load 延迟加载图片的 jQuery 插件
jquery 插件实现图片延迟加载效果代码
javascript小数计算出现近似值的解决办法
jquery1.4后 jqDrag 拖动 不可用
jquery 应用代码 方便的排序功能
选择TreeView控件的树状数据节点的JS方法(jquery)
jquery 图片Silhouette Fadeins渐显效果
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
javascript 同时在IE和FireFox获取KeyCode的代码
js 键盘记录实现(兼容FireFox和IE)
javascript 函数速查表
jQuery AnythingSlider滑动效果插件
经典海量jQuery插件 大家可以收藏一下

Javascript 中的 JS教程:childNodes与parentNode


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 86 ::
收藏到网摘: 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的时候,在计算上有一些特别。