js总结 (6) DOM操作 节点元素 遍历树

DOM,主要用来修改HTML的标准编程接口,可以用来修改各种html标签内容 和属性 样式。

查找:

document: 整个文档。 

document.getElementsByTagName

document.getElementById

document.getElementsByClassName

   遍历节点:

var div=document.getElementsByClassName('con')[0];

div.parentNode-> 父节点  (最顶端的parentNode为#document);
遍历元素:

div.children 遍历所有的子元素(孙子就不算)这就是一个对象,可以.length属性

获取节点类型:div.firstElementChild.nodeType

 

.......................总结............................

     节点                   元素节点

 

div.parentNode;      div.parentElement;
.childNodes                 .children
.firstchild;                    .firstElementChild;
.lastchild;                     .lastElementchild;
.nextSibling;                .nextElementSibling;
.previousSibling          .prevElementSibling;

 

节点的类型


元素节点 —— 1
属性节点 —— 2
文本节点 —— 3
注释节点 —— 8
document —— 9
DocumentFragment —— 11
获取节点类型 nodeType

 习题

  1. 封装函数,返回元素e的第n层祖先元素

var strong=document.getElementsByTagName('strong')[0];
    
    function retparent(elem,n) {
      
    while(elem && n){
       
        elem = elem.parentElement;
        n--;

      }
        return elem;
    } 
    retparent(strong,4);

2.遍历元素节点树

 1. 这个方法只能查到 儿子节点

var div=document.getElementsByTagName('div')[0];
    var arr=[];
    arr.push(div.children);

 2.儿子孙子一起遍历

    var div=document.getElementsByTagName('div')[0];
    var child = div.firstChild;

  while(child != div.lastChild){  //判断是否是最后一个
    if(child.nodeType == 1){      //判断是不是元素节点
        console.log( child );
    }
    child = child.nextSibling;
}

3. 兼容性  一起遍历

var div=document.getElementsByTagName('div')[0];
var child = div.firstElementChild;     //这是返回第一个元素节点  next就是下一个 孙子也可以返回

while(child){
    console.log( child );
    child = child.nextElementSibling;
}
var s=div.firstElementChild;
for (var i = 0 ; i <div.children.length; i++) {

    console.log(s);
    s=s.nextElementSibling;
}

 

3.查找e的第n个兄弟元素。

 

    var strong=document.getElementsByTagName('strong')[0];
      function retSibling(e,n) {
        while(e && n){
            if(n>0){
                e=e.nextElementSibling;
                n--;

            }else{
                e=e.previousElementSibling;
                n++;

            }
        }
          return e;
        }  

 

 4.封装函数insertAfter() 类似于  insertBefore()

var i=document.getElementsByTagName('i')[0];
    var p=document.getElementsByTagName('p')[0];
    var div=document.getElementsByTagName('div')[0];

    Element.prototype.insertAfter = function(targetNode,OriginNode) {

         var afterS=OriginNode.nextElementSibling;
        if (afterS==null) {
             this.appendChild(targetNode);
        }else{
        this.insertBefore(targetNode,afterS);}

    };

 

5. 将目标节点内的节点顺序逆序

    var p=document.getElementsByTagName('p')[0];
    var div=document.getElementsByTagName('div')[0];
    function reverse(a) {
         for (var i =a.children.length-2; i >=0; i--) 
         {
            a.appendChild(a.children[i])
  }
    }
 

 

 

 

 

 

 

 

创建

var div = document.createElement('div');
        div.style.background="red";
        div.style.width="100px";
        div.style.height="100px";
        document.body.appendChild(div);

 

 

转载于:https://www.cnblogs.com/nice2018/p/9847968.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值