DOM中节点增删改查,与js运行机制

92 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情

节点node

nodeType 节点类型 元素节点:1 属性节点:2 文本节点:3

nodeName 节点名称

nodeValue 节点值

 

父级节点

node.parentNode //最近的一个父节点,如果指定的节点没有父节点则返回null

 

子节点

所有子节点 parentNode.childNodes(标准) //获取元素节点需要专门处理,不提倡

子元素节点 parentNode.children(非标准) //只读属性

第一个子节点 parentNode.firstChild

最后一个子节点 parentNode.lastChild

 

//兼容性问题ie9以上才支持,找不到返回null

第一个子元素节点 parentNode.firstElementChild

最后一个子元素节点 parentNode.lastElementChild

 

//解决方案

第一个子元素节点 parentNode.children[0]

最后一个子元素节点 parentNode.children[parentNode.children.length -1]

 

其他节点

node.nextSibling //当前元素的下一个兄弟节点

node.previousSibling //返回当前元素上一个兄弟节点

 

//兼容性问题ie9以上

node.nextElementSibling //返回当前元素下一个兄弟元素节点

node.previousElementSibling //返回当前元素上一个兄弟节点

 

//封装一个兼容性函数

function gerNextElementSibling(element) {

var el = element;

while(el = el.nextSibling) {

if(el.nodeType === 1) {

return el;

}

}

return null;

}

 

创建节点

var li = document.createElement("li"); //创建元素节点

var ul = document.querySelector('ul''); //后面追加元素

ul.appendChild(li);

 

//添加节点node.insertBefore(child,指定元素); 在此节点之前

ul.insertBefore(li, ul.children[0]);

 

//删除节点

node.removeChild()()

 

//克隆节点

node.cloneNode()

!如果括号参数为空或者false,则是浅拷贝,即只克隆复制节点本身,不克隆里面的子节点

如果括号参数为true,则是深度拷贝,会复制节点本身以及里面所有的节点

js执行机制(事件循环)

 

js是单线程 导致执行时间过长,页面渲染加载阻塞

HTML5提出Web Woker标准, 允许javascript脚本创建多个线程,但是子线程完全受主线程控制,于是js就出现了同步任务和异步任务

 

1.先执行执行栈中的同步任务

2.异步任务(回调函数)放入任务队列中

3.一旦执行栈中所有同步任务执行完毕,系统会按照次序读取任务队列中的异步任务

于是被读取的异步任务结束等待状态,进入执行栈,开始执行