zoukankan      html  css  js  c++  java
  • javascript DOM 学习

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <style type="text/css">
    .child2{ width:300px; height:auto;}
    .child5{color:Red;}
    </style>
    </head>
    <body>
        <div id="father" class="father">
            <div id="child1" class="child1">child1</div>
            <div id="child2" class="child2">child2</div>
            <div id="child3" class="child3" mark="mark" style="200px;">child3</div>
         </div>
         <ul>
            <li></li>
            <li></li>
            <li></li>
         </ul>
         <img src="444444.png" alt="" style="200px; height:200px;"/>
         <img src="444444.png" alt="" style="200px; height:200px;"/>
         <img src="444444.png" alt="" style="200px; height:200px;"/>
    </body>
    <script type="text/javascript">
        //(1)nodeType 节点
        // 节点包括12种属性
        // 1  元素节点
        // 2  属性
        // 3  文本
        // 8  注释
        // 9  文档
        var father = document.getElementById("father");
        if(father.nodeType==1){//兼容所有浏览器
            console.log("father is a element");
        }
        //nodeName 标签名
        if(father.nodeType==1){
            console.log("nodeName:"+father.nodeName);
            console.log("nodeValue:"+father.nodeValue);
            console.log("className:"+father.className);
        }
        
        //(2)节点关系 每个节点都有个childNodes属性,其中保存着NodeList对象
        //childNodes
        var child1 = father.childNodes[0];
        if(child1!=null){
            console.log("child1:"+child1.className);//ie下正常 chrome firefox下显示undefined 
        }
        //firstChild
        var firstChild = father.firstChild;
        if(firstChild!=null){
            console.log("firstChild:" + firstChild.className); //ie下正常 chrome firefox下显示undefined 
        }
        //lastChild
        var lastChild = father.lastChild;
        if(lastChild!=null){
            console.log("lastChild:" + lastChild.className); //ie下正常 chrome firefox下显示undefined 
        }
        //nextSibling 
        var child1Next = child1.nextSibling;
        if(child1Next!=null){
            console.log("child1Next:" + child1Next.className); //ie下正常 chrome firefox下显示正常
        }
    
        //child1NextPre
        var child1NextPre = child1Next.previousSibling;
        //hasChildNodes() 是否具有子节点
        console.log("hasChildNodes:" + father.hasChildNodes());
        //appendChild 不会添加,只会更换位置
        //father.appendChild(child1Next);
    
        //question1 className 在ie下显示正常,在chrome firefox先显示不正常 因为使用childNodes 在chrome firefox下回出现很多空的节点
        //例如 enter回车键,也会产生节点
        //ie下 father只有2个childnode
        //chrome firefox下有5个childnode 
    
        //0 : 回车 
        //1 : child1
        //2 : 回车
        //3 : child2
        //4 : 回车
    
        //解决方案 将回车 空格等等节点去掉
        function getNewNodes(obj) {
            var newNode = [];
            var childnodes = obj.childNodes;
            for (var n in childnodes) {
                if (childnodes[n].nodeType == 1) {//如果为节点元素,则push进数组
                    newNode.push(childnodes[n]);
                }
            }
            return newNode;
        }
        console.log(getNewNodes(father).toString());
        console.log(getNewNodes(father)[0].className)
        //parentNode 父节点
        var parentNode = getNewNodes(father)[0].parentNode;
        console.log(parentNode.className);
        //insertBefore 接收2个参数,如果第二个参数为null,则作用和appendChild一样,如果不为null,则将第一个参数节点插到第二个参数节点的前面
        var a = getNewNodes(father)[0];
        var b = getNewNodes(father)[1];
        var c = getNewNodes(father)[2];
        father.insertBefore(c, a);
        //replaceChild(newNode,oldNode)
        //removeChild(node)
      
        //区分浏览器
        function browserName() {
            var name = navigator.userAgent;
            if (name.toLowerCase().indexOf("firefox") !=-1) {
                return "firefox";
            }
            if (name.toLowerCase().indexOf("msie") != -1) {
                return "ie";
            }
            if (name.toLowerCase().indexOf("chrome") != -1) {
                return "chrome";
            }
            if (name.toLowerCase().indexOf("opera") != -1) {
                return "opera";
            }
        }
        console.log("浏览器:" + browserName());
    
        //document 类型
        //document 是 HTMLDocument的一个实例,表示整个html页面
        //document对象是window对象的一个属性
        //nodeType 为9 ,nodeName 为#document nodeValue为null ownerDocument为null
        // documentElement
        //
        var html = document.childNodes;
        for (var k in html) {
            if (html[k].nodeType == 1) {
                console.log(html[k].nodeName);
            }
        }
        //console.log(html);
        var db = document.body;
        var originalTitle = document.title;
        document.title = "Fuck you";
        var url = document.URL;
        console.log(url);
        var domain = document.domain;
        console.log(domain);
        var reffer = document.referrer;
        //document.
    
        //查找元素 getElementById() getElementsByTagName()
        var imgs = document.getElementsByTagName("img");
        console.log(imgs.length);
        console.log(imgs[0].src);
        var allElement = document.getElementsByTagName("*");
        for (var k in allElement) {
            console.log(allElement[k]);
        }
        //getElementsByName()
        //document.anchors; document.applets; document.forms; document.links;
        //document.write;document.writeln的区别是writein会换行,我测试的时候出现的是空格
        document.write("dd,");
        document.writeln("dddd");
        document.write("dd"); //dd,dddd dd
    
        //element 类型
        //nodeType 为 1
        //parentNode 可能为Document 或者Element
    
        //html 元素
        // id title lang dir className 属性可以直接显示出来
        var divId = getNewNodes(father)[0].id;//兼容
        var divClassName = getNewNodes(father)[0].className;//兼容
        console.log(divId + "," + divClassName);
        divId = getNewNodes(father)[0].getAttribute("id");//兼容
        divClassName = getNewNodes(father)[0].getAttribute("className");//注意,不兼容的写法
        console.log(divId + divClassName); //在Ie7下获取不到className的值
        //所以标准的兼容的写法还是直接写.className
        var mark = getNewNodes(father)[0].getAttribute("mark");
        console.log("mark:" + mark); //兼容
        //setAttribute()
        getNewNodes(father)[0].setAttribute("mark", "mark1");
        //removeAttribute() ie6不支持
    
        //css
        var div = getNewNodes(father)[0];//样式潜入
        //console.log("嵌入"+div.style.width);
        div = getNewNodes(father)[2];
        console.log(div.className + div.style.width); //样式内联
        //console.log(div.currentStyle.width); //IE
        //console.log(window.getComputedStyle(div, null).getPropertyValue("width"));
        function getRealStyle(obj, styleName) {
           // var element = document.getElementById(id);
            var realStyle = null;
            if (obj.currentStyle)
                realStyle = obj.currentStyle[styleName];
            else if (window.getComputedStyle)
                realStyle = window.getComputedStyle(obj, null)[styleName];
            return realStyle;
        }
        console.log("兼容:" + getRealStyle(div, "width"));
    
        //createElement 创建元素
        var newDiv = document.createElement("div");
        newDiv.setAttribute("id", "child4");
        newDiv.setAttribute("mark", "mark4");
        newDiv.className = "child4";
        newDiv.innerHTML = "child4";
        father.appendChild(newDiv);
        var div2 = document.createElement("div");
        div2.className = "child5";
        div2.innerHTML = "child5";
        father.appendChild(div2);
    
        var div3 =document.createElement("table");
        var html1 = "<tr><td>dddd</td></tr>";
        div3.innerHTML = html1;
        father.appendChild(div3);
        //text 类型 nodeType 3
        //comment 注释类型 nodeType 8
    </script>
    </html>
  • 相关阅读:
    Nodejs与ES6系列3:generator对象
    Nodejs与ES6系列2:Promise对象
    Nodejs与ES6系列1:变量声明
    Nodejs与ES6系列4:ES6中的类
    angular单元测试与自动化UI测试实践
    javascript 异步模块加载 简易实现
    javascript模式 (3)——工厂模式和装饰模式
    TP手册学习第四内置天
    TP手册学习第三天
    tp5命令行基础
  • 原文地址:https://www.cnblogs.com/lihaozhou/p/3629633.html
Copyright © 2011-2022 走看看