• DOM访问关系(父节点 子节点)


    把下面的知识点掌握了,可以做一下下面的案例,都是工作中常用的,很有用
    知识点
     
    1、带Eleent和不带区别
        a)带Element的获取的是元素节点
        b)不带Element的获取文本节点和属性节点
     
    关系访问节点
    1、获取父节点   parentNode
    li.parentNode.style.background="green"
    2、获取兄弟节点:
           a)previousSibling 前一个兄弟元节点
           b)nextSibling 后一个兄弟节点
                 IE678中指下一个元素节点 (标签)
                 在IE8以上,火狐指下一个节点(包括空文档和换行节点) 
     // 兼容ie678
        box3.previousSibling.style.background="yellow"
        box3.nextSibling.style.background="blue"
    
    
     //获取的是文本节点和4个换行
       console.log(box3.nextSibling)
          c)nextElementSibling/previousElementSibling 
                在IE678中不支持
    //兄弟节点 ie678不兼容
        box3.previousElementSibling.style.background="yellow";//前一个节点元素
        box3.nextElementSibling.style.background="blue"//后一个节点元素

    //兼容性写法
        var pre=box3.previousElementSibling || box3.previousSibling;
        var nex=box3.nextElementSibling || box3.nextSibling;
        pre.style.background="yellow";
        nex.style.background="blue"
     3、获取单个子节点 
            a)firstChild 第一个子节点
            b)lastChild 最后一个子节点
                  IE678中指下一个元素节点 (标签)
                  在IE8以上,火狐指下一个节点(包括空文档和换行节点) 
            c)firstElementChild / lastElementChild 
                在IE678中不支持
    //单个子节点 调用者是父节点
     //firstChild:IE678中指最后一个子元素节点(标签)
     //firstElementChild:在火狐谷歌IE9都指的最后一个子元素节点
     console.log(box2.parentNode.lastElementChild)

    5、所有的子节点children    (最常用)
           a)它返回指定元素的子元素集合,
            b)返回值都是数组
            c)  兼容IE678/火狐
            d)在IE678/ 可以获取注释
      var chi=box3.parentNode.children;
        for(var i=0; i<chi.length; i++){
            chi[i].style.background="black"
        }
    6, 所有的子节点 childNodes(不经常用)
                a)获取所以的元素和文本,空格节点
    var box3=document.getElementById("box3");
    var arr=box3.parentNode.childNodes;
    //console.log(arr)
            for(var i=0; i<arr.length; i++){
                if(arr[i].nodeType===1){
                    arr[i].style.background="gold"
                    console.log(arr[i])
                }
            }

    7、任意子节点
        节点.parentNode(父亲节点).children(所以字节点)[ 索引值 ]
    var box3=document.getElementById("box3");
    var nede=box3.parentNode.children[2];//索引值
    console.log(nede)
    8、拓展内容 
         a):标签类型    
        如果节点是元素节点,则 nodeType 属性将返回 1。
        如果节点是属性节点,则 nodeType 属性将返回 2。
        如果节点是文本节点,则 nodeType 属性将返回3。
    <div id="box"></div>
    var box=document.getElementById("box")
    var box1=box.getAttributeNode("id")
    console.log(box1.nodeType)

       b) nodeName:节点的名字

    <div id="box"></div>
    var box=document.getElementById("box")
    var box1=box.getAttributeNode("id")
    console.log(box.nodeName)
    console.log(box1.nodeName)

        c)nodeValue节点的值

    <div id="box"></div>
    var box=document.getElementById("box")
    var box1=box.getAttributeNode("id")
    console.log(box.nodeValue)
    console.log(box1.nodeValue)

    案例

    //用nodeType写出各行变色
                var ul=document.getElementsByTagName("ul")[0];
                var arr1=ul.childNodes
                console.log(ul.childNodes)
                //把元素放在数组中
                var arr2=[]
                for(var i=0; i<arr1.length; i++){
                    
                    if(arr1[i].nodeType ===1){
                        arr2.push(arr1[i])
                    }
                }
                for(var i=0; i<arr2.length; i++){
                    if(i%2===0){
                        arr2[i].style.background="red"
                    }
                }

    top案例

    window.onload=function(){
                //封装函数,用到就调用
                var box=document.getElementsByClassName("box");
                //调用函数
               /* fu(box[0]);
                fu(box[1]);*/
                //多个同样的板块用到,for循环调用
                for(var i=0; i<box.length; i++){
                    fu(box[i])
                };
                function fu(ele){ //外面的box
                var liArr=ele.getElementsByTagName("li");
                var spanArr=ele.getElementsByTagName("span");
                //绑定事件 为一每一个li绑定鼠标以上事件(for循环)
                for(var i=0; i<liArr.length; i++){
                    //每次循环绑定一个属性,属性值是该盒子的索引值
                    liArr[i].setAttribute("index",i);
                    liArr[i].onmouseover=function(){
                        //思路:1点亮盒子,2利用索引值显示盒子 (排他思想)
                        //排他思想是和for循环连用
                        for(var j=0; j<liArr.length; j++){
                            liArr[j].removeAttribute("class");
                            spanArr[j].removeAttribute("class");
                        }
                        this.setAttribute("class","current");
                        spanArr[this.getAttribute("index")].setAttribute("class","hide")
                    }
                }
                }
            }

  • 相关阅读:
    【流量劫持】SSLStrip 终极版 —— location 瞒天过海
    【流量劫持】沉默中的狂怒 —— Cookie 大喷发
    【流量劫持】SSLStrip 的未来 —— HTTPS 前端劫持
    Web 前端攻防(2014版)
    流量劫持 —— 浮层登录框的隐患
    流量劫持能有多大危害?
    流量劫持是如何产生的?
    XSS 前端防火墙 —— 整装待发
    XSS 前端防火墙 —— 天衣无缝的防护
    XSS 前端防火墙 —— 无懈可击的钩子
  • 原文地址:https://www.cnblogs.com/wdz1/p/7511569.html
Copyright © 2020-2023  润新知