• 操作DOM


    操作dom一般是如下4个:
    更新:更新该DOM节点的内容,相当于更新了该DOM节点表示的HTML的内容;
    遍历:遍历该DOM节点下的子节点,以便进行进一步操作;
    添加:在该DOM节点下新增一个子节点,相当于动态增加了一个HTML节点;
    删除:将该节点从HTML中删除,相当于删掉了该DOM节点的内容以及它包含的所有子节点。

    document.getElementById();//根据ID获取DOM结构
    document.getElementsByTagName();//根据class获取DOM结构
    document.getElementsByClassName();//总是返回一组DOM节点(数组)。要精确地选择DOM,可以先定位父节点,再从父节点开始选择,以缩小范围。

    // 通过querySelector获取ID为q1的节点:
    var q1 = document.querySelector('#q1');
    // 通过querySelectorAll获取q1节点内的符合条件的所有节点:
    var ps = q1.querySelectorAll('div.highlighted > p');

    1:更新DOM
    直接修改节点的文本,有两种方法。第一种:修改innerHTML属性,不但可以修改一个DOM节点的文本内容,还可以直接通过HTML片段修改DOM节点内部的子树
    // 获取<p id="p-id">...</p>
    var p = document.getElementById('p-id');
    // 设置文本为abc:
    p.innerHTML = 'ABC'; // <p id="p-id">ABC</p>
    // 设置HTML:
    p.innerHTML = 'ABC <span style="color:red">RED</span> XYZ';
    // <p>...</p>的内部结构已修改

    第二种是修改innerText或textContent属性,这样可以自动对字符串进行HTML编码,保证无法设置任何HTML标签:
    // 获取<p id="p-id">...</p>
    var p = document.getElementById('p-id');
    // 设置文本:
    p.innerText = '<script>alert("Hi")</script>';
    // HTML被自动编码,无法设置一个<script>节点:
    // <p id="p-id">&lt;script&gt;alert("Hi")&lt;/script&gt;</p>
    两者的区别在于读取属性时,innerText不返回隐藏元素的文本,而textContent返回所有文本。另外注意IE<9不支持textContent。

    2:插入DOM
    若是<div> </div>之间是空的就可以用innerHtml来插入,若是不为空就不能用innerHtml,因为这个会替换原本的文本。
    第一种:appendChild(向父节点后添加子节点)
    <!-- HTML结构 -->
    <p id="js">JavaScript</p>
    <div id="list">
    <p id="java">Java</p>
    <p id="python">Python</p>
    <p id="scheme">Scheme</p>
    </div>
    把<p id="js">JavaScript</p>添加到<div id="list">的最后一项:
    var js = document.getElementById('js'),
    list = document.getElementById('list');
    list.appendChild(js);
    <!-- HTML结构 因为我们插入的js节点已经存在于当前的文档树,因此这个节点首先会从原先的位置删除,再插入到新的位置。-->
    <div id="list">
    <p id="java">Java</p>
    <p id="python">Python</p>
    <p id="scheme">Scheme</p>
    <p id="js">JavaScript</p>
    </div>
    var
    list = document.getElementById('list'),
    haskell = document.createElement('p');
    haskell.id = 'haskell';
    haskell.innerText = 'Haskell';
    list.appendChild(haskell);
    <!-- HTML结构 -->
    <div id="list">
    <p id="java">Java</p>
    <p id="python">Python</p>
    <p id="scheme">Scheme</p>
    <p id="haskell">Haskell</p>
    </div>
    第二种:insertBefore
    还是以上面的HTML为例,假定我们要把Haskell插入到Python之前:
    var haskell = document.createElement('p'),
    python = document.getElementById('python'),
    list = document.getElementById('list');
    haskell.id = 'haskell';
    haskell.innerText = 'Haskell';
    list.insertBefore(haskell,python);
    <!-- HTML结构 -->
    <div id="list">
    <p id="java">Java</p>
    <p id="haskell">Haskell</p>
    <p id="python">Python</p>
    <p id="scheme">Scheme</p>
    </div>
    使用insertBefore重点是要拿到一个“参考子节点”的引用。很多时候,需要循环一个父节点的所有子节点,可以通过迭代children属性实现
    var i,c,
    list = document.getElementById('list');
    for(i=0;i<list.children.length;i++){
    c = list.children[i];//拿到第i个子节点
    }
    <!-- HTML结构 按照字母顺序重新-->
    <ol id="test-list">
    <li class="lang">Scheme</li>
    <li class="lang">JavaScript</li>
    <li class="lang">Python</li>
    <li class="lang">Ruby</li>
    <li class="lang">Haskell</li>
    </ol>
    var list = document.getElementById('test-list'),
    linked = document.getElementsByClassName('lang'),
    arr=[];
    for(var i=0;i<linked.length;i++){
    arr.push(linked[i]);
    }
    arr.sort(function(x,y){
    var x = x.innerText;
    var y = y.innerText;
    if(x>y){return 1;}
    if(x<y){return -1;}
    if(x=y){return 0;}
    });
    for(var i=0;i<arr.length;i++){
    list.appendChild(arr[i]);
    }

    3:删除DOM

  • 相关阅读:
    移动端rem屏幕设置
    封装ajax库,post请求
    获取浏览器url参数
    身份证验证
    jq封装插件
    页面分享功能,分享好友、朋友圈判断,用share_type做标记 这里用的是jweixin-1.3.2.js
    @RequestParam和@RequestBody区别
    400报错
    IDEA中用Maven构建SSM项目环境入门
    Eclipse搭建Spring开发环境
  • 原文地址:https://www.cnblogs.com/qinbb/p/5795928.html
Copyright © 2020-2023  润新知