每一周的学习报告 第四周 DOM基础

学习周报

JavaScript dom

获取页面元素

获取页面元素有下面几种方法

  1. 根据ID获取
  2. 根据标签名获得
  3. 通过H5新增的方法获得
  4. 特殊元素获得
根据ID获得

使用getElementById方法可通过ID获得元素
此方法的参数为ID(区分大小写)
返回一个匹配到 ID 的 DOM Element 对象

<body>
    <div id="speicialDiv"></div>
    <script>
        const sDiv=document.getElementById('speicialDiv');
        console.log(sDiv);
        console.dir(sDiv);
    </script>
</body>

这里使用console.dir(sDiv)可以打印出元素对象更好的查看属性和方法

根据标签名获取元素

使用getElementsByTagName()方法可以返回带有指定标签名的对象的集合
返回值为 元素对象的集合 以伪数组形式存储 无论有没有这个元素都是以伪数组形式返回
可以使用document.getElementsByTagName()找到同标签名的使用元素
也可以使用Element.getElementsByTagName()的方式找到对应父元素中的子元素

<body>
    <ol id="ol">
        <li>h</li>
    </ol>
    <ul id="ul">
        <li>uuuu</li>
    </ul>
    <script>
        const ol = document.getElementById('ol');
        console.log(ol.getElementsByTagName('li')[0]);
    </script>
</body>
通过H5新增的方法获得元素
  1. getElementsByClassName() 根据类名获得某些元素集合
    具体用法和getElementsByTagName类似

  2. queryselector() 返回指定选择器的第一个元素对象
    参数可以为.class(类选择器)、#ID(id选择器)、li(标签名),都将返回第一个元素对象

  3. querySelectorAl1()返回指定选择器的所有元素对象集合

获取特殊元素
  1. 获取body标签
    通过document.body直接获得

  2. 获取html元素
    通过document.documentElement获得

事件基础

事件就是一种可以被JavaScript侦察到的行为
可以简单理解为:触发—响应机制
每一个元素都可以触发事件

事件三要素

事件由三部分组成:

  1. 事件源
    事件被触发的对象,例如:按钮
    我们需要获取这个事件源
var btn = document.getElementById('btn');
  1. 事件类型
    指如何触发这个事件,鼠标经过还是鼠标点击(onclick)还是键盘按下

  2. 事件处理程序
    通过一个函数赋值的方式完成

<body>
    <button id="btn">唐伯虎</button>
    <script>
        let btn=document.getElementById("btn");
        btn.onclick=function(){
            alert('点蚊香');
        };
    </script>
</body>
执行事件的步骤
  1. 获取事件源
  2. 注册事件绑定事件
  3. 添加事件处理程序(采取函数赋值形式)

例:下面我们需要点击div 然后控制台输出我被选中了

<body>
    <div>233</div>
    <script>
        //点击div 控制台输出 我被选中了
        //1.获取事件源
        const div = document.querySelector('div');
        //2.绑定事件 注册事件
        //3.添加事件处理程序
        div.onclick = function(){
            console.log('点击');
        }
    </script>
</body>

操作元素

JavaScript的DOM操作可以改变网页内容、结构和样式,我们可以利用DOM操作元素来改变元素里面的内容、属性等。注意以下都是属性

改变元素内容
  1. 改变元素文本内容
  • element.innerText
    从起始位置到终止位置的内容,但它去除 html标签,同时空格和换行也会被去掉
  • element.innerHTML
    起始位置到终止位置的全部内容,包括html标签,同时保留空格和换行

两者的区别:
innerText 不识别html标签 非标准 去除空格和换行
innerHTML 识别html标签 W3C标准 保留空格和换行的

<body>
    <div></div>
    <p>233
        <span>hhh</span>
    </p>
    <script>
        const div = document.querySelector('div');
        const p = document.querySelector('p');
        div.innerText='今天很<strong>无聊</strong>';
        //结果不识别标签原封不动打印出来
        div.innerHTML="今天很<strong>无聊</strong>";
        //识别标签无聊加深

        //读写元素内容
        console.log(p.innerText);
        //空格换行被去除
        console.log(p.innerHTML);
        //空格换行保留
    </script>
</body>
  1. 改变元素属性
    type、 value、checked、selected、disabled属性可以被直接获取和修改
    通过element.src、element.href等直接修改元素的属性

  2. 改变表单属性
    利用DOM可以操作如下表单元素的属性︰
    type. value、 checked、 selected、 disabled

改变表单里面的文字内容是通过改变表单的vulue值来改变的
如果想要表单被点击后不能被点击,可以更改表单的disabled

  1. 修改元素的样式属性
  • element.style 获取行内样式操作
    如果需要修改的属性比较少,可直接使用element.style进行单个修改
  • element.className 获取类名样式操作
    当需要修改的属性比较多时,我们可以专门在CSS中写一个类change,当修改时将class名写入元素中
    在这里插入图片描述
  1. 自定义元素操作
  • 获取属性:
    直接获取: element.属性,方便但只能获取元素自带的属性
    通过getAttribute(‘属性’):这种方式的特点是能获取自定义属性
  • 设置属性值
    element-属性=‘值’设置内置属性值。
    element.setAttribute (‘属性’,‘值’)
  1. H5自定义属性
    为什么要设置自定义属性:保存并使用数据。有些数据可以保存到页面中而不用保存到数据库中
  • 设置H5自定义属性
    H5规定自定义属性data-开头做为属性名并且赋值。比如
<div data-index“1”></div>

或者使用JS设置

element.setAttribute( 'data-index’,2)
  • 获取H5自定义属性
    兼容性获取:element.getAttribute( 'data-index’);
    H5新增:element.dataset.index或者element.dataset[ 'index’ ]
    (ie 11才开始支持)

节点操作

为什么要学习节点

获取元素:

  1. 利用DOM提供的方法获取元素
document.getElementByld()
document.getElementsByTagName)
document.querySelector
//等......

缺点是没有逻辑,让人看不懂元素间的关系
2. 利用节点层级关系获取元素
利用父子兄节点关系获取
元素逻辑性强,但是兼容性稍差心

节点概述

网页中的所有内容都是节点(标签、属性、文本、注释等),在DOM中,节点使用node来表示。
利用dom树可以把节点分为不同层级

一般地,节点至少拥有nodeType(节点类型 ) 、nodeName(节点名称)和nodeValue(节点值)这三个基本属性。

  • 元素节点nodeType为1
  • 属性节点nodeType为2
  • 文本节点nodeType为3(文本节点包含文字、空格、换行等)
节点层级

一般用到的是父子兄关系

  1. 父级元素
  • node.parentNode
  1. 子节点
  • parentNode.childNodes
    获得父节点的所有子节点
    它会把所有节点都包含进去,包含元素节点、文本节点等…
    如果需要只获得某一种节点,要经过特殊处理
<body>
    <ul>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    <script>
        let ul = document.querySelector('ul');
        let totalLiList = ul.childNodes;
        let totalLiArr = Array.from(totalLiList);
        let liList = totalLiArr.filter((item)=>
            item.nodeType==1         
        )
        console.log(liList);
    </script>
</body>

因此一般不推荐使用


更好的方法:

  • parentNode.children(非标准)
    获取所有的子元素节点

获取第一个节点或最后一个节点:

  • firstChild第一个子节点不管是文本节点还是元素节点
  • lastChild最后一个子节点不管是文本节点还是元素节点
  • firstElementChild 返回第一个子元素节点
  • lastElementChild 返回最后一个子元素节点

但最后两个方法存在兼容性问题,因此在实际开发中一般用children方法,将元素节点存储为数组,再取数组的第一个或最后一个
3. 兄弟节点

  • node.nextsibling
    nextsibling 返回当前元素的下一个兄弟节点,找不到则返回null。同样,也是包含所有的节点。
  • node.previoussibling
    previoussibling返回当前元素上一个兄弟节点,找不到则返回null。同样,也是包含所有的节点.
  • node.nextElementsibling
    nextElementsibling返回当前元素下一个兄弟元素节点,找不到则返回null。
  • node.previousElementsibling
    previousElementsibling返回当前元素上一个兄弟节点,找不返回null。
在页面中创建一个新的元素
  1. 创建节点
document.createElement( 'tagName " )

document.createElement()方法创建由tagName 指定的 HTML元素。因为这些元素原先不存在,是根据我们的需求动态生成的,所以我们也称为动态创建元素节点
2. 添加节点

  • node.appendchild (child)
    node.appendchild()方法将一个节点添加到指定父节点的子节点列表末尾。类似于css里面的after伪元素
  • node.insertBefore (child,指定元素)
    node.insertBefore()方法将一个节点添加到父节点的指定子节点前面。类似于css里面的before伪元素
删除节点
  • node. removeChild(child)
    node.removeChild()方法从DOM中删除一个子节点,返回删除的节点。
复制节点
  • node.cloneNode ()
    node.cloneNode()方法返回调用该方法的节点的一个副本。也称为克隆节点/拷贝节点

注意:

  1. 如果括号参数为空或者为false,则是浅拷贝,即只克隆复制节点本身,不克隆里面的子节点
  2. 如果括号参数为true,则是深度拷贝,会复制节点本身以及里面所有的子节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值