• 以Python角度学习Javascript(二)之DOM


    HTML DOM 定义了访问和操作 HTML 文档的标准方法。

    DOM 将 HTML 文档表达为树结构。

    文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口。它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。我们最为关心的是,DOM把网页和脚本以及其他的编程语言联系了起来。DOM属于浏览器,而不是JavaScript语言规范里的规定的核心内容。

    一、查找元素

    1、直接查找(ID, class等)

    document.getElementById             根据ID获取一个标签
    document.getElementsByName          根据name属性获取标签集合
    document.getElementsByClassName     根据class属性获取标签集合
    document.getElementsByTagName       根据标签名获取标签集合  //比如a标签啊,p标签啊等

    document.getElementsByClassName("current")[0].setAttribute("class","");
    document.getElementById("course").setAttribute("class","current");
     

    2、间接查找(父节点等)

    parentNode          // 父节点
    <div id="aa">            
        <div id="test"></div>
    </div>
    <script type="text/javascript">
        console.log(document.getElementById('test').parentNode);
    </script>
    
    结果:
    <div id="aa">....< /div>
    View Code
    childNodes          // 所有子节点
        <div>
            123
            <div class="c1">asdf</div>
            <div class="c1" id="i1">
                <p>asdf</p>
                <div name="n1">
                    <span>asd</span>
                </div>
                <div name="n1">
                    <a>1</a>
                    <a>11111</a>
                </div>
            </div>
            <div class="c1">asdf</div>
        </div>
    ------------------------------------------------
    <script type="text/javascript">
    var elm = document.getElementById('i1');
    var p1_text = elm.parentNode;
    var p1_notext = elm.parentElement;
    
    //console.log(p1_text);
    //console.log(p1_notext);
    
    var p1_child_text = p1_text.childNodes;//获取所有子节点
    for (var i=0; i<p1_child_text.length;){
        console.log(p1_child_text[i])
    }
    
    // for (var i=0;i<p1_child_text.length;i++) {
    //     cur = p1_child_text[i]
    //     if (cur.nodeType == 1){  //如果是文本的话,比如div标签里面的123的话,cur.nodeType == 3,如果是标签的话,cur.nodeType ==1
    //         console.log(p1_child_text[i])
    //     }
    // }
    
    var p1_child_notext = p1_notext.children;
    for(var i=0;i<p1_child_notext.length;i++){
        console.log(p1_child_notext[i])
    }
    </script>
    详解样例

    firstChild // 第一个子节点

    lastChild // 最后一个子节点

    nextSibling // 下一个兄弟节点

    previousSibling // 上一个兄弟节点

     
    parentElement
    // 父节点标签元素 children // 所有子标签 firstElementChild // 第一个子标签元素 lastElementChild // 最后一个子标签元素 nextElementtSibling // 下一个兄弟标签元素 previousElementSibling // 上一个兄弟标签元素

     二、操作

    1、内容 (获取、设置标签的text, HTML等)

    innerText   文本
    <div id="test">
    <span style="color:red">test1</span> test2
    </div>
    div
     document.getElementById('test').innerHTML;
    返回值:<span style="color:red">test1</span> test2
    document.getElementById('test').innerText;
    返回值:test1 test2, 其中span标签被去除了
    document.getElementById('test').outerHTML;
    返回值:<div id="test"><span style="color:red">test1</span> test2</div>
    script 
    outerText
    innerHTML   对象内部HTML内容
    outerHTML   除了包含innerHTML的全部内容外, 还包含对象标签本身。
    value 值

     2、属性 -->自定义属性(获得属性等)

    attributes                // 获取所有标签属性
            <a href="#" class=".." id=""></a>
        </div>
            <script type="text/javascript">
            document.write(document.getElementsByTagName("div")[3].attributes.length);
    案例
    setAttribute(key,value)   // 设置标签属性
    <!DOCTYPE html>
    <html>
    <body>
    
    <input value="OK">
    
    <p id="demo">点击按钮来设置按钮的 type 属性。</p>
    
    <button onclick="myFunction()">试一下</button>
    
    <script>
    function myFunction()
    {
    document.getElementsByTagName("INPUT")[0].setAttribute("type","button"); 
    }
    </script>
    
    <p>Internet Explorer 8 以及更早的版本不支持此方法。</p>
    
    </body>
    </html>
    View Code
    getAttribute(key)         // 获取指定标签属性
    <!DOCTYPE html>
    <html>
    <body>
    
    请阅读 <a href="/jsref/dom_obj_attributes.asp" target="_blank">Attr 对象</a>,
    
    <p id="demo">请点击按钮来显示上面这个链接的 target 属性值。</p>
    
    <button onclick="myFunction()">试一下</button>
    
    <script>
    function myFunction()
    {
    var a=document.getElementsByTagName("a")[0];
    document.getElementById("demo").innerHTML=a.getAttribute("target");
    }
    </script>
    
    </body>
    </html>
    
    结果是:_blank
    案例
    removeAttribute()   //删除指点标签属性
    /*
    var atr = document.createAttribute("class"); atr.nodeValue="democlass"; document.getElementById('n1').setAttributeNode(atr); */
    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <input type="button" value="全选"  onclick="CheckAll();"/>
        <input type="button" value="取消" onclick="CancelAll();"/>
        <input type="button" value="反选" onclick="ReverseCheck();"/>
    
        <table border="1" >
            <thead>
    
            </thead>
            <tbody id="tb">
                <tr>
                    <td><input type="checkbox" /></td>
                    <td>111</td>
                    <td>222</td>
                </tr>
                <tr>
                    <td><input type="checkbox" /></td>
                    <td>111</td>
                    <td>222</td>
                </tr>
                <tr>
                    <td><input type="checkbox" /></td>
                    <td>111</td>
                    <td>222</td>
                </tr>
                <tr>
                    <td><input type="checkbox" /></td>
                    <td>111</td>
                    <td>222</td>
                </tr>
            </tbody>
        </table>
        <script>
            function CheckAll(ths){
                var tb = document.getElementById('tb');
                var trs = tb.childNodes;
                for(var i =0; i<trs.length; i++){
    
                    var current_tr = trs[i];
                    if(current_tr.nodeType==1){
                        var inp = current_tr.firstElementChild.getElementsByTagName('input')[0];
                        inp.checked = true;
                    }
                }
            }
    
            function CancelAll(ths){
                var tb = document.getElementById('tb');
                var trs = tb.childNodes;
                for(var i =0; i<trs.length; i++){
    
                    var current_tr = trs[i];
                    if(current_tr.nodeType==1){
                        var inp = current_tr.firstElementChild.getElementsByTagName('input')[0];
                        inp.checked = false;
                    }
                }
            }
    
            function ReverseCheck(ths){
                var tb = document.getElementById('tb');
                var trs = tb.childNodes;
                for(var i =0; i<trs.length; i++){
                    var current_tr = trs[i];
                    if(current_tr.nodeType==1){
                        var inp = current_tr.firstElementChild.getElementsByTagName('input')[0];
                        if(inp.checked){
                            inp.checked = false;
                        }else{
                            inp.checked = true;
                        }
                    }
                }
            }
    
        </script>
    </body>
    </html>
    
    Demo
    View Code
    
    

    3、class操作(添加删除class等)

    className                // 获取所有类名
    classList.remove(cls)    // 删除指定类
    classList.add(cls)       // 添加类
    

    4、标签操作(创建a标签操作标签等)

    a.创建标签

    // 方式一
    var tag = document.createElement('a')
    tag.innerText = "wupeiqi"
    tag.className = "c1"
    tag.href = "http://www.cnblogs.com/wupeiqi"
     
    // 方式二
    var tag = "<a class='c1' href='http://www.cnblogs.com/wupeiqi'>wupeiqi</a>"
    

     b.操作标签

    // 方式一
    var obj = "<input type='text' />";
    xxx.insertAdjacentHTML("beforeEnd",obj);
    xxx.insertAdjacentElement('afterBegin',document.createElement('p'))
     
    //注意:第一个参数只能是'beforeBegin'、 'afterBegin'、 'beforeEnd'、 'afterEnd'
     
    // 方式二
    var tag = document.createElement('a')
    xxx.appendChild(tag)
    xxx.insertBefore(tag,xxx[1])
    

     5、样式操作(css操作)

    var obj = document.getElementById('i1')
     
    obj.style.fontSize = "32px";
    obj.style.backgroundColor = "red";
    
        <input onfocus="Focus(this);" onblur="Blur(this);" id="search" value="请输入关键字" style="color: gray;" />
    
        <script>
            function Focus(ths){
                ths.style.color = "black";
                if(ths.value == '请输入关键字' || ths.value.trim() == ""){
    
                    ths.value = "";
                }
            }
    
            function Blur(ths){
                if(ths.value.trim() == ""){
                    ths.value = '请输入关键字';
                    ths.style.color = 'gray';
                }else{
                    ths.style.color = "black";
                }
            }
        </script>
    View Code

    6、位置操作

    总文档高度
    document.documentElement.offsetHeight
      
    当前文档占屏幕高度
    document.documentElement.clientHeight
      
    自身高度
    tag.offsetHeight
      
    距离上级定位高度
    tag.offsetTop
      
    父定位标签
    tag.offsetParent
      
    滚动高度
    tag.scrollTop
     
    /*
        clientHeight -> 可见区域:height + padding
        clientTop    -> border高度
        offsetHeight -> 可见区域:height + padding + border
        offsetTop    -> 上级定位标签的高度
        scrollHeight -> 全文高:height + padding
        scrollTop    -> 滚动高度
        特别的:
            document.documentElement代指文档根节点
    View Code

    具体也可以参考博客:http://www.cnblogs.com/renfanzi/p/5663472.html7、提交表单

    document.geElementById('form').submit()
    

     7、其他操作

    console.log                 输出框
    alert                       弹出框
    confirm                     确认框
      
    // URL和刷新
    location.href               获取URL
    location.href = "url"       重定向
    location.reload()           重新加载
      
    // 定时器
    setInterval                 多次定时器
    clearInterval               清除多次定时器
    setTimeout                  单次定时器
    clearTimeout                清除单次定时器
    

     三、事件

    对于事件需要注意的要点:

    • this
    • event
    • 事件链以及跳出

    this标签当前正在操作的标签,event封装了当前事件的内容。

  • 相关阅读:
    用Visual C#创建Windows服务程序
    C# WinForm窗口最小化到系统托盘
    C# ?? 运算符是什么?
    linux中守护进程启停工具start-stop-daemon
    linux shell脚本中 mode=${1:-sart} filename=${fileuser:-"filename"}
    Unix/Linux 脚本中 “set -e” 的作用
    利用Sonar定制自定义扫描规则
    docker 镜像详解
    Docker Compose使用
    docker搭建gitlab、Redmine
  • 原文地址:https://www.cnblogs.com/renfanzi/p/5651311.html
Copyright © 2020-2023  润新知