深入解读JavaScript中BOM和DOM(1)(3)
6、设置/获取属性节点
- setAttribute();//设置
- var a = document.createElement(“p”);
- a.setAttribute(“title”,”my demo”);
- var a =document.getElementById(“cssrain”);
- var b = a.getAttribute(“title”);
获取的时候,如果属性不存在,则返回空,注意ie和ff返回不同,可以看我以前的例子。 返回虽然不同,但是可以用一个方法来判断:if(a.getAttribute(“title”) ){ }
7、查找节点
getElementById();
返回一个对象,对象拥有 nodeName , nodeType , parentNode , ChildNodes 等属性。getElementsByTagName():查找标签名的所有元素。返回一个集合,可以用循环取出每个对象,对象拥有 nodeName , nodeType , parentNode , ChildNodes 等属性。 例子:
- var ps = document.getElementsByTagName(“p”);
- for(var i=0 ; i< ps.length ; i++){
- ps[i].setAttribute(“title”,”hello”);
- //也可以使用: ps.item(i).setAttribute("title","hello");
- }
- <body>
- <div id="cssrain">
- <div id="a">a </div>
- <div id="b">b </div>
- <div id="c">c </div>
- </div>
- </body>
- <script>
- var ps = document.getElementById("cssrain")
- if(ps.hasChildNodes){
- alert( ps.childNodes.length );
- }
- </script>
8、DOM属性
我们常用的3中类型:
nodeType == 1 : 元素节点
nodeType == 2 : 属性节点
nodeType == 3 : 文本节点
如果想记住的话,上面的顺序我们可以看做是从前到后。比如:<p title="cssrain" >test</p> 从前往后读:你会发现先是元素节点,然后是属性节点,最后是文本节点,这样你就很容易记住了nodeType分别代表什么类型了。nodeType属性经常跟if配合使用,以确保不会在错误的节点类型上执行错误的操作。比如:
- function cs_demo(mynode){
- if(mynode.nodeType == 1){
- mynode.setAttribute("title","demo");
- }
- }
代码解释:先检查mynode的nodeType属性,以确保它所代表的节点确实是一个元素节点。和nodeName属性一样,他也是只读属性,不能进行设置.
- <div id="c">aaaaaaaaaaaaaaaa</div>
- <SCRIPT LANGUAGE="JavaScript">
- var c= document.getElementById("c");
- alert( c.nodeValue );//返回null
- </SCRIPT>
nodeValue是一个可以读、写的属性。 但它不能设置元素节点的值。看下面的例子:
- <div id="c">aaaaaaaaaaaaaaaa</div>
- <SCRIPT LANGUAGE="JavaScript">
- var c= document.getElementById("c");
- c.nodeValue =" dddddddddddd"; //不能设置
- //alert( c.firstChild.nodeValue ) //元素节点 包括属性节点和文本节点。
- c.firstChild.nodeValue = "test"//能设置
- </SCRIPT>
当然我们为了确保能正确运行:可以加一段代码:
- <div id="c">aaaaaaaaaaaaaaaa</div>
- <SCRIPT LANGUAGE="JavaScript">
- var c= document.getElementById("c");
- c.nodeValue =" dddddddddddd"; //不能设置
- //alert( c.firstChild.nodeValue )
- if( c.firstChild.nodeType==3 ){ //判断是不是 文本节点
- c.firstChild.nodeValue = "test"//能设置
- }
- </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 属性是一个只读属性。






