龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

深入解读JavaScript中BOM和DOM(1)(3)

时间:2013-03-06 14:58来源:未知 作者:admin 点击:
分享到:
6、设置/获取属性节点 setAttribute();//设置 var a = document .createElement(p); a.setAttribute(title,mydemo); var a = document .getElementById(cssrain); var b = a .getAttribute(title); 获取的

6、设置/获取属性节点

  1. setAttribute();//设置   
  2.  
  3. var a  = document.createElement(“p”);   
  4. a.setAttribute(“title”,”my demo”);   
  5.  
  6. var a =document.getElementById(“cssrain”);   
  7. var b = a.getAttribute(“title”);  

获取的时候,如果属性不存在,则返回空,注意ie和ff返回不同,可以看我以前的例子。 返回虽然不同,但是可以用一个方法来判断:if(a.getAttribute(“title”) ){   }

7、查找节点

getElementById();

返回一个对象,对象拥有 nodeName , nodeType , parentNode , ChildNodes 等属性。getElementsByTagName():查找标签名的所有元素。返回一个集合,可以用循环取出每个对象,对象拥有 nodeName , nodeType , parentNode , ChildNodes 等属性。 例子:

  1. var ps = document.getElementsByTagName(“p”);   
  2. for(var i=0 ; i< ps.length ; i++){   
  3.  ps[i].setAttribute(“title”,”hello”);   
  4. //也可以使用:  ps.item(i).setAttribute("title","hello");   
  5. }   
  6.    
  7. <body>   
  8. <div id="cssrain">   
  9. <div id="a"></div>   
  10. <div id="b"></div>   
  11. <div id="c"></div>   
  12. </div>   
  13. </body>   
  14. <script>   
  15. var ps = document.getElementById("cssrain")   
  16. if(ps.hasChildNodes){   
  17.         alert( ps.childNodes.length  );     
  18. }   
  19. </script>  

8、DOM属性

我们常用的3中类型:
 
nodeType == 1  : 元素节点
nodeType == 2  : 属性节点
nodeType == 3  : 文本节点

如果想记住的话,上面的顺序我们可以看做是从前到后。比如:<p  title="cssrain" >test</p> 从前往后读:你会发现先是元素节点,然后是属性节点,最后是文本节点,这样你就很容易记住了nodeType分别代表什么类型了。nodeType属性经常跟if配合使用,以确保不会在错误的节点类型上执行错误的操作。比如:

  1. function cs_demo(mynode){   
  2.       if(mynode.nodeType == 1){   
  3.               mynode.setAttribute("title","demo");   
  4.         }   
  5. }  

代码解释:先检查mynode的nodeType属性,以确保它所代表的节点确实是一个元素节点。和nodeName属性一样,他也是只读属性,不能进行设置.

  1. <div id="c">aaaaaaaaaaaaaaaa</div>   
  2. <SCRIPT LANGUAGE="JavaScript">   
  3. var cdocument.getElementById("c");   
  4. alert(  c.nodeValue  );//返回null   
  5. </SCRIPT>  

nodeValue是一个可以读、写的属性。 但它不能设置元素节点的值。看下面的例子:

  1. <div id="c">aaaaaaaaaaaaaaaa</div>   
  2. <SCRIPT LANGUAGE="JavaScript">   
  3. var cdocument.getElementById("c");   
  4.   c.nodeValue =" dddddddddddd"; //不能设置   
  5.   //alert( c.firstChild.nodeValue ) //元素节点 包括属性节点和文本节点。   
  6.   c.firstChild.nodeValue =  "test"//能设置   
  7. </SCRIPT>  

当然我们为了确保能正确运行:可以加一段代码:

  1. <div id="c">aaaaaaaaaaaaaaaa</div>   
  2. <SCRIPT LANGUAGE="JavaScript">   
  3. var cdocument.getElementById("c");   
  4.   c.nodeValue =" dddddddddddd"; //不能设置   
  5.   //alert( c.firstChild.nodeValue )   
  6.   if( c.firstChild.nodeType==3 ){ //判断是不是 文本节点   
  7.   c.firstChild.nodeValue =  "test"//能设置   
  8.   }   
  9. </SCRIPT>  

nodeValue一般只用来设置 文本节点的值。如果要刷新属性节点的值,一般使用setAttribute(). childNodes属性:返回一个数组,数组由元素节点的子节点构成。由于文本节点和属性节点都不可能再包含任何子节点,所以他们的childNodes属性永远返回一个空数组。

可以使用hasChildNodes方法,它用来判断某个元素有没有子节点。或者if (container.childNodes.length < 1) ;childNodes也是一个只读属性。如果要增加节点,可以使用appendChild()或者insertBefore() ,删除节点可以使用removeChild(); 操作后,childNodes属性会自动刷新。

firstChild属性

由于文本节点和属性节点都不可能再包含任何子节点,所以他们的firstChild属性永远返回一个空数组。 如果没有子节点,将返回null;node.firstChild 等价于  node.childNodes[0] ; firstChild属性是一个只读属性。

lastChild属性

由于文本节点和属性节点都不可能再包含任何子节点,所以他们的lastChild属性永远返回一个空数组。 如果没有子节点,将返回null; node.lastChild  等价于  node.childNodes[ node.childNodes.length - 1 ] ;lastChild属性是一个只读属性。

nextSibling属性

返回目标节点的下一个兄弟节点。如果目标节点后面没有同属于一个父节点的节点,nextSibling 将返回null ;nextSibling 属性是一个只读属性。

previousSibling属性

返回目标节点的前一个兄弟节点。如果目标节点前面没有同属于一个父节点的节点,previousSibling 将返回null ;previousSibling 属性是一个只读属性。

parentNode属性

注:parentNode属性返回的节点永远是一个元素节点,因为只有元素节点才有可能有子节点。

当然有个例外

document节点,他没有父节点。所以document节点的parentNode属性将返回null;parentNode 属性是一个只读属性。
 

精彩图集

赞助商链接