• js中的DOM节点操作---增删改查


    查找节点

    getElementById(),getElementsByClassName(),getElementsByTagName()

    querySelector(),querySelectorAll()

    创建节点

    createElement():创建一个dom节点

    示例代码

    document.createElement('div');

    插入节点

    appendChild():子节点末尾追加

    示例代码

    const element = document.createElement('div');
    document.body.appendChild(element);

    insertBefore():同级指定位置插入,但还是需要知道父节点

    示例代码

    const newNode = document.createElement('div');
    document.body.insertBefore(newNode);

    替换节点

    replaceChild():替换子节点。接受两个参数,第一个为要插入的节点,第二个为要替换的节点

    示例代码

    const newNode=document.createElement('span');
    const oldNode=document.querySelector('#root');
    document.body.replaceChild(newNode,oldNode);

    移除节点

    removeChild():删除子节点

    示例代码

    const element=document.querySeletor('#root');
    document.body.removeChild(element);

    综合示例

     <!DOCTYPE html>
     <html lang="en">
         <head>
             <meta charset="utf-8" />
             <title>DOM CRUD</title>
             <style></style>
         </head>
         <body>
             <div id='root'>
             </div>
             <script>
                /**
                 * 查找节点
                 * @param {*} name
                 * name: id,class,tagname
                 * 调用示例 findNode('#root')或者findNode('div')
                 */
                 const findNode = function(name){
                    return document.querySelector(name)
                 }
                /**
                 * 创建一个节点
                 * @param {*} tagName, attrObj
                 * name: 标签名
                 * attrObj: 属性名
                 * 调用示例: createNode('div'), createNode('div',{id:'first',innerHTML:'helloworld'})
                 */
                 const createNode = function(tagName,attrObj){
                    let node = document.createElement(tagName);
                    for(let key in attrObj){
                        node[key]=attrObj[key];
                    }
                    return node;
                 }
                /**
                 * 插入一个节点
                 * @param {*} parentNode,newNode
                 * parentNode: 要插入的父节点
                 * newNode: 要插入的节点
                 * 调用示例: insertNode(root,node2)
                 */
                 const insertNode = function(parentNode,newNode){
                    // appendChild
                    // insertBefore
                    parentNode.appendChild(newNode);
                 }
                /**
                 * 替换一个节点
                 * @param {*} parentNode,newNode,oldNode
                 * parentNode: 要替换节点的父节点
                 * newNode: 替换后的节点
                 * oldNode: 替换前的节点
                 * 调用示例: replaceNode(root,node1,node2);
                 * 注意:第二个参数和第三个参数不可调换位置
                 */
                 const replaceNode = function(parentNode,newNode,oldNode){
                    parentNode.replaceChild(newNode,oldNode)
                 }
                /**
                 * 移除一个节点
                 * @param {*} sourceNode,targetNode
                 * sourceNode: 要移除节点的父节点
                 * targetNode: 需要被移除的节点
                 * 调用示例: removeNode(root,node1);
                 */
                 const removeNode = function(sourceNode,targetNode){
                    sourceNode.removeChild(targetNode)
                 }
                /**
                 * 渲染一段dom
                 * @param {*} node htmlStr
                 * node: 需要插入的父节点
                 * htmlStr: dom字符串
                 * 调用示例: renderDom(findNode('#root'),'<div id="myDiv">myDiv</div>');
                 */
                 const renderDom = function(node, htmlStr){
                   node.innerHTML=htmlStr;
                 }
    
                 //测试
                 const root=findNode('#root');
                 const node1 = createNode('div',{id:'n1',innerHTML:'节点1'});
                 const node2 = createNode('div',{id:'n2',innerHTML:'节点2'});
                 const node3 = createNode('div',{id:'n3',innerHTML:'节点3'});
                 const node4 = createNode('div',{id:'n4',innerHTML:'节点4'});
    
                 const htmlStr = `<div id="myDiv">mydiv</div>`
    
    
                //  insertNode(root,node1);
                //  insertNode(root,node2);
                //  insertNode(root,node3);
    
                // replaceNode(root,node4,node1);
    
                // removeNode(root,node1)
    
                renderDom(findNode('#root'),htmlStr);
    
             </script>
         </body>
     </html>

    总结

    1. 节点操作本质上是树形结构的操作,都需要已知父节点
    2. 查找节点统一使用querySeletor(), 代码会简洁不少
    3. inserBefore可以传一个参考节点(referenceNode),可以指定插入位置

    参考

  • 相关阅读:
    24.最优布线问题(kruskal算法)
    24.最优布线问题(kruskal算法)
    Algs4-1.4.11为StaticSETofInts添加一个实列方法howMany()
    Algs4-1.4.9预测程序运行时间
    Algs4-1.4.10二分查找找出元素所在的最小索引
    Algs4-1.4.7统计算术运算与比较次数
    Algs4-1.4.8计算输入文件中相等的整数对的数量
    Algs4-1.4.6给出以下代码段的运行时间的增长数量级
    Algs4- 1.4.4参照表1.4.4为TwoSum建立一和类似的表格
    Algs4-1.4.2修改ThreeSum防止两个int值相加可能溢出
  • 原文地址:https://www.cnblogs.com/xingguozhiming/p/8647804.html
Copyright © 2020-2023  润新知