进阶-DOM事件相关知识

5 进阶-DOM事件相关知识

5.1 请问js怎样增、删、查、替换DOM节点?

【考点映射】

  • js操作DOM元素

【频率】★★★★★

【难度】☆

  1. 创建元素节点 

document.createDocumentFragment() //创建一个虚拟节点对象,节点对象包含所有属性和方法
document.createElement("p");//创建p标签
document.createTextNode("txt");//创建文本标签    
    2. 插入元素节点

element.appendchild:向节点的子节点列表末尾添加新的子节点

element.insertBefore:在已有的元素前插入一个新元素

element.insertAfter:在已有的元素后插入一个新元素

注意:在DOM的原生api中,只有insertBefore,没有insertAfter,借助原有的api,可以模拟一个insterAfter:

先找父级元素,若目标元素为最后一个元素,直接append到父级末尾,如果不是,则利用insertBefore插入到目标元素的下一个元素的前面

function insterAfter(newElement,targetElement){
     var parent = targetElement.parentNode;
     if(parent.lastChild == targetElement){
           parent.appendChild(newElement);
     }
     else{      parent.insertBefore(newElement,targetElement.nextSibling);
     }              
}
    3. 删除元素节点

element.removeChild:从文档树中删除一个节点(先找到要删除节点的父节点,用父节点删除)

var para1 = document.getElementById("p1")
para1.parentNode.removeChild(para1)
    4. 替换元素节点

element.replaceChild:将一个节点替换为另一个节点(先找到要替换的节点的父节点,用父节点替换)

element.replaceChild(newnode,oldnode);
    5. 查找元素节点
document.querySelector("#demo") //查找文档中id="demo"的节点
document.querySelectorAll("#demo") //查找文档中id="demo"的所有节点

5.2 请问js事件绑定有哪几种方式?

【考点映射】

  • js事件绑定

【频率】★★★★★

【难度】☆

  1. html标签事件绑定

 <button id="vv" onclick="function()" ></button>
    2. js事件绑定
var func = function () {                           
} 
var aa = document.getElementById('vv') 
aa.onclick = func
    3. 直接定义函数与内容
document.getElementById('vv').onclick = function () {                           }    
    4. W3C标准的事件监听addEventListener(IE6/IE7/IE8不支持)
//写法一
var func = function () {                           
} 
document.getElementById('vv').addEventListener('click',func);
//写法二
document.getElementById('vv').addEventListener('click',function () {});
    5. IE下使用attachEvent函数
document.getElementById('vv').attachEvent('onclick',function () {}); 

5.3 请问什么是事件流?

【考点映射】

  • 事件流三阶段

【频率】★★★★★

【难度】☆

js与html页面的交互是通过DOM事件实现的,事件流 指页面接收事件的顺序

DOM事件流包括三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段

利用简单的HTML页面为例,进行具体分析:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Event Bubbling</title>
</head>
<body>
    <button id="clickMe">Click Me</button>
</body>
</html>

事件冒泡:即事件开始时,由最具体的元素(也就是事件发生所在的节点)接收,然后逐级向上传播到较为不具体的节点(文档)(摘自《JavaScript高级程序设计》)

对于上述页面中, 当单击<button>元素,这个click点击事件会按照如下顺序传播:

<button>→<body>→<html>→Document(由内到外)

事件捕获:与事件冒泡正好相反,不具体的节点应该更早接收到事件,最具体的节点应该最后接收到事件,其用意在于在事件到达预定目标之前捕获它(摘自《JavaScript高级程序设计》)

对于上述页面中, 当单击<button>元素,这个click点击事件会按照如下顺序传播:

Document→<html>→<body>→<button>(由外到内)


事件流:首先事件捕获,为截获事件提供机会,然后实际的目标接收到事件, 最后事件冒泡阶段,可在这个阶段对事件做出响应



5.4 请问什么是事件委托/事件代理?

【考点映射】

  • 事件委托原理及应用

【频率】★★★★★

【难度】☆☆

事件委托:又名事件代理,利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件(摘自《JavaScript高级程序设计》)

优点:

  1. 事件管理函数变少,不需要为每个元素都添加监听函数,对于同一个父节点下相似的子元素,可以通过委托给父元素的监听函数来处理事件。

  2. 可以更方便地动态添加和修改元素,不需要因元素的改动而修改事件绑定

  3. 可以大大减少与DOM的交互次数,从而提高整体运行性能,事件委托开是 事件处理程序过多 问题的直接解决方案

通过一个简单的实例学习如何使用事件委托:

 <div id="box">
     <input type="button" value="添加" id="add">
     <in

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

前端岗面试求职真题解析 文章被收录于专栏

前端岗位面试求职攻略及真题解析~~

全部评论

相关推荐

头像 会员标识
11-27 17:08
已编辑
牛客_产品运营部_私域运营
腾讯 普通offer 24k~26k * 15,年包在36w~39w左右。
点赞 评论 收藏
分享
10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务