初识JS_WebAPI基础Day3——笔记整理+1课后作业...

一.节点操作

文章目录
1 . 删除节点
2. 复制(克隆)节点
3. 创建元素的三种方式
4. innerTHML和createElement效率对比
5.DOM学习总结
二.事件高级
1 . 事件监听
2. 事件监听兼容性解决方案
3. 删除事件(解绑事件)
4. 删除事件兼容性解决方案
5. 事件对象
6. e.target 和 this 的区别
7.阻止默认行为
7. 阻止事件冒泡
8.事件委托
9.鼠标事件对象

1. 删除节点

在这里插入图片描述
node.removeChild() 方法从 node节点中删除一个子节点,返回删除的节点。

 //  删除元素  node.removeChild(child)
 ul.removeChild(ul.children[0]);

2. 复制(克隆)节点

在这里插入图片描述

// 1. node.cloneNode(); 括号为空或者里面是false 浅拷贝 只复制标签不复制里面的内容
// 2. node.cloneNode(true); 括号为true 深拷贝 复制标签复制里面的内容

3. 创建元素的三种方式

在这里插入图片描述

4. innerTHML和createElement效率对比

innerHTML字符串拼接方式(效率低)

<script>
    function fn() {
        var d1 = +new Date();
        var str = '';
        for (var i = 0; i < 1000; i++) {
            document.body.innerHTML += '<div style="width:100px; height:2px; border:1px solid blue;"></div>';
        }
        var d2 = +new Date();
        console.log(d2 - d1);
    }
    fn();
</script>

createElement方式(效率一般)

<script>
    function fn() {
        var d1 = +new Date();

        for (var i = 0; i < 1000; i++) {
            var div = document.createElement('div');
            div.style.width = '100px';
            div.style.height = '2px';
            div.style.border = '1px solid red';
            document.body.appendChild(div);
        }
        var d2 = +new Date();
        console.log(d2 - d1);
    }
    fn();
</script>

innerHTML数组方式(效率高:常用

<script>
    function fn() {
        var d1 = +new Date();
        var array = [];
        for (var i = 0; i < 1000; i++) {
            array.push('<div style="width:100px; height:2px; border:1px solid blue;"></div>');
        }
        document.body.innerHTML = array.join('');
        var d2 = +new Date();
        console.log(d2 - d1);
    }
    fn();
</script>

5.DOM学习总结

关于dom操作,我们主要针对于元素的操作。主要有创建、增、删、改、查、属性操作、事件操作。

1.创建:

document.write
innerHTML
createElement

2.增

appendChild
inserBefore

3.删

removeChild

4.改

主要修改dom的元素属性,dom元素的内容、属性、表单的值等
1.元素属性:src、href、title等等
2.普通元素内容:innerHTML、innerText
3.修改表单元素:value、type、disabled等
4.样式:style、className

5.查

1.API方法:getElementById、getElementByTagName 古老语法,不推荐
2.H5新增:querySelector、querySelectorAll 推荐
3.利用节点操作获取元素:父节点parentNode、子节点children、兄弟previousElementSibling、nextElementSibling  推荐

6.主要针对自定义属性的操作

1.setAttribute:设置dom的属性值
2.getAttribute:得到dom属性值
3.removeAttribute: 移除属性

二.事件高级

1. 事件监听

addEventListener()事件监听(IE9以后支持)
在这里插入图片描述
eventTarget.addEventListener()方法将指定的监听器注册到 eventTarget(目标对象)上,当该对象触发指定的事件时,就会执行事件处理函数。
在这里插入图片描述

2. 事件监听兼容性解决方案

封装一个函数,函数中判断浏览器的类型:
在这里插入图片描述

3. 删除事件(解绑事件)

在这里插入图片描述

4. 删除事件兼容性解决方案

在这里插入图片描述
5.dom事件流(面试经典)
☆ 事件流 描述的是从页面接收事件的顺序。
☆ 事件 发生时会在元素节点之间按照特定的顺序传播,这个传播过程 就为 DOM事件流

在这里插入图片描述
DOM 事件流会经历3个阶段:

  1. 捕获阶段

  2. 当前目标阶段

  3. 冒泡阶段
    在这里插入图片描述

 <div class="father">
        <div class="son">son盒子</div>
 </div>
// 冒泡阶段 如果addEventListener 第三个参数是 false 或者 省略 
// son -> father ->body -> html -> document
----------------------------------------
// 捕获阶段:如果addEventListener() 第三个参数是 true 那么在捕获阶段触发
// document -> html -> body -> father -> son

5. 事件对象

事件发生后,跟事件相关的一系列信息数据的集合都放到这个对象里面,这个对象就是事件对象。
常见属性和方法:
在这里插入图片描述

6. e.target 和 this 的区别

  • this 是事件绑定的元素(绑定这个事件处理函数的元素) 。

  • e.target 是事件触发的元素。

常情况下terget 和 this是一致的,
但有一种情况不同,那就是在事件冒泡时(父子元素有相同事件,单击子元素,父元素的事件处理函数也会被触发执行),
这时候this指向的是父元素,因为它是绑定事件的元素对象,
而target指向的是子元素,因为他是触发事件的那个具体元素对象。

7.阻止默认行为

html中一些标签有默认行为,例如a标签被单击后,默认会进行页面跳转。

 <a href="http://www.baidu.com">百度</a>
<script>
	//  传统的注册方式
	a.onclick = function(e) {
	// 普通浏览器 e.preventDefault();  方法
	e.preventDefault();
	// 低版本浏览器 ie678  returnValue  属性
	e.returnValue = false;
	// 我们可以利用return false 也能阻止默认行为 没有兼容性问题
	return false;
    }
</script>

7. 阻止事件冒泡

在这里插入图片描述

8.事件委托

事件委托也称为事件代理,在 jQuery 里面称为事件委派。

说白了就是,不给子元素注册事件,给父元素注册事件,把处理代码在父元素的事件中执行。

事件委托的原理
给父元素注册事件,利用事件冒泡,当子元素的事件触发,会冒泡到父元素,然后去控制相应的子元素。

9.鼠标事件对象

在这里插入图片描述


此部分为习题部分:

动态添加列表

题目描述

页面上有一些美女列表,当单击li时背景色变为红色,但点击按钮时会新增1个美女到列表最前面,并且单击新增的美女背景也会变为红色,具体表现如下图:
1)要求使用到事件委托
在这里插入图片描述

<body>
  <ul id="ul">
    <li>西施</li>
    <li>貂蝉</li>
    <li>昭君</li>
    <li>凤姐</li>
    <li>芙蓉姐姐</li>
  </ul>
  <input type="button" value="按钮" id="btn" />
  <script>
    // 利用事件委托(事件冒泡),给新创建的元素也注册上事件
    var ul = document.getElementById('ul');
    ul.onclick = function (e) {
      e.target.style.backgroundColor = 'red';
    }
    // 单击按钮,添加一个新的li
    var btn = document.getElementById('btn');
    btn.onclick = function(){
      var liObj = document.createElement('li');
      liObj.innerHTML = '杨超越';
      ul.insertBefore(liObj, ul.children[0]);
    }
  </script>
</body>

分享

原创文章 51 获赞 82 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_46313446/article/details/106161740