javascript轻松寻找所有子节点

我们在做web前段开发的时候,经常会用到

  
  
  
  
  1. document.getElementById 
寻找节点的方法。以前在写C语言的时候,经常会做一些小的内联函数。我们可以把这个程序稍作扩展
  
  
  
  
  1. function getID(id) {  
  2.  
  3.     if (document.getElementById) {  
  4.  
  5.         return document.getElementById(id);  
  6.     }  
  7.     else {  
  8.  
  9.         return document.all[id];  
  10.     }  
这样既减少了代码的长度,又在增加了一点跨浏览器的特性。

好了,我们该说说正题了。当你获取到一个节点,

  
  
  
  
  1. function SelectElement(id){  
  2.  
  3.     var element=getID(id);  
  4.     //doing something  

接着你又想获取他的子节点或子子节点的时候,你会怎么做?反正我会怎么做

  
  
  
  
  1. function selectChild(element, key, value) {      //(非递归算法)  
  2.  
  3.     /// <summary>  
  4.     ///广度优先寻找所有的子节点属性key=value的元素节点和属性节点( 非递归算法)  
  5.     ///</summary>  
  6.     /// <param name="element" type="object">需要查找的祖先节点</param>  
  7.     /// <param name="key">属性,以string类型为参数</param>  
  8.     /// <param name="value">值,以string类型为参数</param>  
  9.  
  10.     if (eval("element." + key) == value) {   //将string转换为object  
  11.  
  12.         return element;  
  13.     }  
  14.     key = "bottom.childNodes[i]." + key;       
  15.  
  16.     var bottom, nodes = [];  //nodes存放element的子节点的指针堆栈  
  17.     nodes.push(element);   
  18.  
  19.     do {  
  20.         bottom = nodes.pop();  
  21.  
  22.         for (var i in bottom.childNodes) {  
  23.  
  24.             if (eval(key) == value) {  
  25.  
  26.                 return bottom.childNodes[i];  
  27.             }  
  28.             if (bottom.childNodes[i].childNodes) {  
  29.  
  30.                 nodes.push(bottom.childNodes[i]);  
  31.             }  
  32.         }  
  33.     } while (nodes.length > 0);  
  34.       
  35.     return null;  

这样用:selectChild(element,"type","button");寻找element节点下的所有type=button的节点,有兴趣的可以自己扩展

本文出自 “11111” 博客,谢绝转载!

你可能感兴趣的:(职场,休闲)