dom对象小例子

转眼间,第一季已经学完了。如果你认真学习第一季了,那么第二季的实战应该对你来说,不会很难。。。
从今天起,我们开始DOM实战演练。
仅仅是演练,不要吓坏了哦.…..
 
Demo1:
<script type="text/javascript" >
window.onload = function() {
  var para = document.createElement("p");
  var info = "nodeName: "+ para.nodeName;// 节点的名称
  info+= " nodeType: "+para.nodeType; // 判断节点的类型, 如果为1 ,则是元素节点。
  alert(info);
}
</script>
<body></body>

Demo2:
<script type="text/javascript">
window.onload = function() {
  var para = document.createElement("p");//创建一个元素节点p
  var txt = document.createTextNode("Hello world");//创建一个文本节点
  para.appendChild(txt);
  var testdiv = document.getElementById("testdiv");
  testdiv.appendChild(para);
}
</script>
<body>
<div id="testdiv">
</div>
</body>

Demo3:
<script type="text/javascript" >
window.onload = function() {
     var node_p  = document.createElement("p");
  var txt_p = document.createTextNode("this is ");
  node_p.appendChild(txt_p);

  var node_strong = document.createElement("strong");
  var txt_strong = document.createTextNode("my");
     node_strong.appendChild(txt_strong);
     node_p.appendChild(node_strong);

  var txt_x = document.createTextNode(" name. ");
     node_p.appendChild(txt_x);

  var testdiv = document.getElementById("testdiv");
     testdiv.appendChild(node_p);
}
</script>
<body>
<div id="testdiv">
</div>
</body>

 

8, DOM属性:

nodeName属性  : 节点的名字。

如果节点是元素节点,那么返回这个元素的名字。此时,相当于tagName属性。

比如:

<p>aaaa</p>  : 则返回 p ;

如果是属性节点,nodeName将返回这个属性的名字。

如果是文本节点,nodeName将返回一个#text的字符串。

另外我要说的是: nodeName属性是一个只读属性,不能进行设置.(写)

nodeType属性 : 返回一个整数,代表这个节点的类型。

我们常用的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属性一样,他也是只读属性,不能进行设置.(写)。

nodeValue属性 : 返回一个字符串,这个节点的值。

如果节点是元素节点,那么返回null;(注意下)

如果是属性节点,nodeValue将返回这个属性的值。

如果是文本节点,nodeValue将返回这个文本节点的内容。

比如:

<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>

//可以看出,如果要设置元素节点,不能直接设置,而必须先使用firstChild或者lastChild等 然后设置nodeValue.

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 属性是一个只读属性

 

 

1, 替换节点。

Element.repalceChild( newNode , oldNode );

OldNode必须是Element的一个子节点。

<body>

 <div id="cssrain">

 <div id="a">a </div>

 <div id="b">b </div>

 <div id="c">c </div>

 </div>

 </body>

<script>

var cssrain = document.getElementById("cssrain");

var msg =  document.getElementById("b");

var para =  document.createElement("p");

cssrain.replaceChild( para , msg  );

</script>

2, 设置/获取属性节点。

setAttribute();//设置

例子:

var a  = document.createElement(p);

a.setAttribute(title,my demo);

不管以前有没有title属性,以后的值是 my demo。

getAttribute();//获取

例子:

var a =document.getElementById(cssrain);

var b = a.getAttribute(title);

获取的时候,如果属性不存在,则返回空,注意ie和ff返回不同,可以看我以前的例子。

返回虽然不同,但是可以用一个方法来判断。

if(a.getAttribute(title) ){   }

3, 查找节点。

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");

}

hasChildNodes:

由名字就可以知道,是判断元素是否有子节点。

返回boolean类型。

文本节点和属性节点不可能有子节点,所以他们的hasChildNodes 永远返回false;

hasChildNodes经常跟 childNodes 一起使用。

比如:

<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>

 

 

2,  复制节点。
cloneNode(boolean) :
它有一个参数。
var mes = document.createTextNode("hello world");
var container = document.createElement("p");
container.appendChild(mes);
document.body.appendChild(container);
var newpara = container.cloneNode(true);//true和false的区别
document.body.appendChild(newpara );
注意:
true的话:是<p>aaaa</p> 克隆。
false: 只克隆 <p></p> ,里面的文本不克隆。
可以自己写个例子,然后用 firebug 看看。
克隆后的新节点,和createTextNode()一样  不会被自动插入到文档 。需要appendChild();
另外还有一个注意: 如果克隆后,id一样,不要忘记用 setAttribute( id  ,   another_id  ) ;
改变新的节点的ID。
3,  插入节点。
appendChild() :
给元素追加一个子节点, 新的节点 插入到 最后。
var container = document.createElement("p");
var t =  document.createTextNode("cssrain");
container.appendChild(t);
document.body.appendChild(container);
他经常跟createElement()和createTextNode(),cloneNode()配合使用。
另外 appendChild()不仅可以用来追加新的元素,也可以你 挪动 文档中现有的元素。
看下面的例子:
<p id="msg">msg</p>
<p id="content">content</p>
<p id="aaa">aaaaaaaa</p>
<script>
var mes = document.getElementById("msg");
var container = document.getElementById("content");
 container.appendChild(mes);
</script>
//发现 msg 放到 content 后面去了 。
J s内部处理方式:
先把ID为 msg 的从文档中删除,然后再插入到 content  后,作为content的最后一个节点。
结果为:
<p id="content">
content
<p id="msg">msg</p>
</p>
<p id="aaa">aaaaaaaa</p>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值