dom继承树,基本操作

226 阅读1分钟
    <head>
        <meta charset="utf-8">
        <title>dom继承树</title>

        <style type="text/css">
        #only{
            font-size:20px;
            color:#fff;
            background-color:orange;
        }
        </style>

    </head>
    <body>

        <!-- <div>
            <b></b>
            abc -->
            <!-- this is commet  -->
             <!-- <strong>
                <span>
                    <i></i>
                </span>
            </strong>
        </div>  -->


        <!-- 3 -->
        <!-- <div>
            <span></span>
            <p></p>
            <strong></strong>
            <i></i>
            <address></address>
        </div> -->

        <!-- DMO基本操作 -->
        <!-- <div>
            <span>1234</span>
            <a href="#" data-log="0">heheehe</a>
        </div> -->

        <!-- 封装insertAfter() -->
        <!-- <div>
            <i></i>
            <b></b>
            <span></span>
        </div> -->
    <script type="text/javascript">
 

例1

        // document--->HTMLdocument--->Document.prototype//原型链
        // HTMLDocument.prototype = {
        //     __proto__:Document.prototype
        // }

dom继承树-06-11 155627.jpg

例2

        // var div = document.getElementsByTagName('div')[0];
        // var span = div.getElementsByTagName('span')[0];//调用span
        // 1.遍历元素节点树(在原型链上编程)

2.封装函数,返回元素的第n层祖先节点

        // function retParent(elem,n){
        //     while(n) {
        //         elem = elem.parentElement;
        //         n --;
        //     }
        //     return elem;
        // }
        // var i = document.getElementsByTagName('i')[0];

dom继承树例2-06-13 202159.jpg

3.封装函数,返回元素e的第n个兄弟节点,n为正,返回后面的兄弟元素节点,n为负,返回前面的,n为0,返回自己。

        // function retSibling(e,n) {
        //     while(e && n) {
        //         if(n>0) {
        //            if(e.nextElementSibling){
        //             e = e.nextElementSibling;
        //            }else{
        //                for(e =e.nextSibling; e&&e.nodeType != 1;e = e.nextSibling);//拓展用法//null没有nodeType,所以会报错,所以还要判断e是否有价值
        //            }
        //             n --;
        //         }else{
        //             if(e.previousElementSibling){
        //             e = e.previousElementSibling;
        //            }else{
        //                for(e =e.previousSibling; e&&e.nodeType != 1;e = e.previousSibling);//拓展用法//null没有nodeType,所以会报错,所以还要判断e是否有价值
        //            }
        //         }
        //         n ++;
        //     }
        //     return e;
        // }
        // var strong = document.getElementsByTagName('strong')[0];

3-06-13 212257.jpg

3-06-14 065956.jpg

4.编辑函数,封装myChildren功能,解决以前部分浏览器的兼容性问题

        // Element.prototype.myChildren = function(){//在原型链上编程
        //     var child = this.childNodes;
        //     var len = child.length;
        //     var arr = [];
        //     for(var i = 0;i <len; i++) {
        //         if(child[i].nodeType == 1){
        //             arr.push(child[i]);
        //         }
        //     }
        //     return arr;
        // }
        // var div = document.getElementsByTagName('div')[0];

4-06-13 204506.jpg

DOM基本操作

增、插、删、替换

       // 1.创建元素节点--document.createElement();
   // var div = document.createElement('div');

       // 2.创建文本节点--document.createTextNode();
   // var text = document.createTextNode('虎仔');

       // 3.创建注释节点--document.createComment();

       // 4.document.creatDocumentFragment();

增1,在页面添加元素-06-14 073748.jpg

     // PARENTNODE.appendChild();//任何一个元素节点都有appendChild方法类似于.push
        // 例子
    // var div = document.getElementsByTagName('div')[0];
    // var text = document.createTextNode('虎仔');
    // var span = document.createElement('span');
    // div.appendChild(text);
    // div.appendChild(span);
    // var text1 = document.createTextNode('demo');
    // span.appendChild(text1);
    // span.appendChild(text);//把div里面的text剪切过来
        // PARENTNODE.inserBefore(a,b);//
    //    例子
    // var div = document.getElementsByTagName('div')[0];
    // var span = document.getElementsByTagName('span')[0];
    // var strong = document.createElement('strong');
    // div.insertBefore(strong,span);
    // var i  = document.createElement('i');
    // div.insertBefore(i,strong);
    // var p = document.createElement('p');
// var div = document.getElementsByTagName('div')[0];

        // parent.removeChild();//被剪切出来
    // div.removeChild(i);

        // child.remove();销毁自身

替换

       // parentNode.replaceChild(new , origin);

Element元素节点的一些属性

        // innerHTML
    
        // innerText/textContent

innerHTML-06-14 154945.jpg

innerHTML-06-14 161412.jpg

innerText-06-14 161859.jpg

textContent-06-14 162150.jpg

Element节点的一些方法

        // ele.setAttribute()
        // ele.getAttribute();

setAttribute-06-14 163034.jpg

setAttribute运用-06-14 163503.jpg

data-log用法

        // var div = document.getElementsByTagName('div')[0];
        // var a = document.getElementsByTagName('a')[0];
        // a.onclick = function() {
        //     console.log(this.getAttribute('data-log'));
        // }

data-log-06-16 160255.jpg

例子1,让行间属性this-name的属性值为标签名nodeName

       // var all = document.getElementsByTagName('*');
       // for(var i = 0;i<all.length; i++) {
       //     all[i].setAttribute('this-name',all[i].nodeName);
       // }

例子2--写一段javascript脚本生成DOM结构,使用标准的DOM方法或属性。

       // var div = document.createElement('div');
       // var p = document.createElement('p');
       // div.setAttribute('class','example');
       // p.setAttribute('class','slogan');
       // var text = document.createTextNode('幺幺');
       // p.appendChild(text);
       // div.appendChild(p);
       // document.body.appendChild(div);

例子2DOM结构-06-16 212329.jpg

例子3--封装函数insertAfter();功能类似insertBefore();

        // Element.prototype.insertAfter = function(targetNode,afterNode) {
        //     var beforeNode = afterNode.nextElementSibling;
        //     if(beforeNode == null) {
        //         this.appendChild(targetNode);
        //     }else{
        //         this.insertBefore(targetNode,beforeNode);
        //     }
        // }
        // var div = document.getElementsByTagName('div')[0];
        // var b = document.getElementsByTagName('b')[0];
        // var span = document.getElementsByTagName('span')[0];
        // var p = document.createElement('p');

insertAfter-06-16 230154.jpg

insertAfter-16 230107.jpg

    </script>
</body>
-->