JavaScript学习笔记20

一、DOM 基本操作(大部分都是类数组)——方法类操作

1.对节点的增删改查

()括号里面都不用写.或#


查看元素节点

document 代表整个文档

(如果给 html 标签上面再套一层标签就是 document)

document.getElementById()
元素 id 在 Ie8 以下的浏览器,不区分 id 大小写,而且
也返回匹配 name 属性的元素,通过 id 标识我们来选择这个元素,一一对应

在这里插入图片描述

除了 id 以外,其余选择出来的都是一组,很少用 id 选择器



.getElementsByTagName()
标签名,这是一个类数组,
最主流的用法,经常用

把页面里面所有的 div 都选择出来

在这里插入图片描述
在这里插入图片描述

从 dom 开始,我们所学的一切系统给我们生成的成组的东西,基本上都是类数组



加个[0]就选中了第一个 div,如果不加 0,那个 div 表示的是一个数组,设置背景颜色就会报错

在这里插入图片描述



getElementsByName();
IE 不支持需注意,只有部分标签 name 可生效(表单,表单
元素,img,iframe)
不是在所有的浏览器都能用——开发一般不用

在这里插入图片描述



把下面所有的 div 都拿出来

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

只拿出第二个 div,加上[1] ,或者在控制台上打 div[1]



选择第一个 p 的方式如下
在这里插入图片描述



只拿出 demo 的 p 标签写法如下:
在这里插入图片描述


注意哪怕整个文档只有一个 demo,也要加[0],不然选出来的就是一个组



.getElementsByClassName()
类名 ->缺点: ie8 和 ie8 以下的 ie 版本中没有,可以多个 class 一起,不是所有浏览器都能用


.querySelector()
css 选择器,只能选一个,在 ie7 和 ie7 以下的版本中没有


.querySelectorAll()
css 选择器,全选,选一组,在 ie7 和 ie7 以下的版本中没有


.querySelectorAll()和.querySelector()
选出来的元素不是实时的(是静态的)
所以一般不用,其他的再怎么修改,跟原来的没有关系


id 选择器不能太依赖,一般当顶级框架存在,在 css 中一般用 class 选择器



querySelector()和.querySelectorAll()选出来的元素不是实时的,是静态的,是副本

在这里插入图片描述



下面的都是实时的

在这里插入图片描述



querySelectorAll()选中了所有的 div,但是实时操作不能实时反馈

在这里插入图片描述


二、DOM 基本操作——非方法类的操作

遍历节点树:(灵活,兼容好)——关系类的选择

  • parentNode → 父节点 (最顶端的 parentNode 为#document);
  • childNodes → 子节点们(直接的节点数)节点包括文本节点,属性节点
  • firstChild → 第一个子节点
  • lastChild → 最后一个子节点
  • nextSibling →后一个兄弟节点
  • previousSibling → 前一个兄弟节点



parentNode —》》父节点

<div>
        <span></span>
        <strong></strong>
        <div>
            <p></p>
        </div>
    </div>
    <script>
        var strong = document.getElementsByTagName('strong')[0];
    </script>

在这里插入图片描述


childNodes-----》》子节点们

    <div>
        <strong>
            <span>1</span>
        </strong>
        <span></span>
        <em></em>
    </div>
    <script>
        var div = document.getElementsByTagName('div')[0];
    </script>

在这里插入图片描述

节点为什么是7?
第一个节点是<div>后面的文本节点(空格回车),
第二个节点是元素节点<strong><span>1</span></strong>
第三个节点是跟着的文本节点(空格回车),
第四个节点是<span></span>
第五个是跟着的文本节点(空格回车),
第六个是<em></em>
第七个是跟着的文本节点(空格回车)

节点的类型

后面的数字是调用nodeType返回的数字

元素节点----1
属性节点----2(基本没用)
文本节点----3
注释节点----8
document—9
DocumentFragment-----11



<div>
        <!-- this is comment -->
        <strong></strong>
        <span></span>
    </div>
    <script>
        var div = document.getElementsByTagName('div')[0];
    </script>

在这里插入图片描述

第一个节点是<div>后面的文本节点(空格回车),
第二个节点是注释节点,
第三个节点是跟着的文本节点(空格回车),
第四个节点是元素节点<strong></strong>
第五个是跟着的文本节点(空格回车),
第六个是<span></span>
第七个是跟着的文本节点(空格回车)



<div>
        123
        <!-- this is comment -->
        <strong></strong>
        <span></span>
    </div>
    <script>
        var div = document.getElementsByTagName('div')[0];
    </script>

在这里插入图片描述

七个,123和空格等是一个文本



firstChild 和 lastChild

 <div>
        123
        <!-- this is comment -->
        <strong></strong>
        <span></span>
    </div>
    <script>
        var div = document.getElementsByTagName('div')[0];
    </script>

在这里插入图片描述



** nextSibling →后一个兄弟节点 ,previousSibling → 前一个兄弟节点**

<div>
        <!-- this is comment -->
        <strong></strong>
        <span></span>
    </div>
    <script>
        var strong = document.getElementsByTagName('strong')[0];
    </script>

在这里插入图片描述



基于元素节点树的遍历(不含文本节点)

(除children外,其余ie9及以下不兼容)

<div>
        <!-- this is comment -->
        <strong></strong>
        <span></span>
    </div>
    <script>
        var div = document.getElementsByTagName('div')[0];
    </script>

在这里插入图片描述



children—>只返回当前元素的元素子节点

在这里插入图片描述

在这里插入图片描述



node.childElementCount ( === node.children.length)
当前元素节点的子元素节点个数(IE 不兼容)——基本不用,因为与 length 相等

在这里插入图片描述
在这里插入图片描述



firstElementChild -> 返回的是第一个元素节点(IE 不兼容)
lastElementChild -> 返回的是最后一个元素节点(IE 不兼容)

在这里插入图片描述
在这里插入图片描述


nextElementSibling / previousElementSibling
返回后一个/前一个兄弟元素节点(IE 不兼容)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

除 children 外,parentElement、node.childElementCount、firstElementChild、lastElementChild、nextElementSibling、 previousElementSibling 在 ie9 及以下不兼容

真正常用的就是 children,兼容性好



每一个节点的四个属性

1、nodeName

元素的标签名,以大写形式表示,只读,不能写

例 nodeName

   <div>
        123
        <!-- this is comment -->
        <strong></strong>
        <span></span>
        <em></em>
        <i></i>
        <b></b>
    </div>
    <script>
        var div = document.getElementsByTagName('div')[0];
    </script>

在这里插入图片描述

2、nodeValue

Text 文本节点或 Comment 注释节点的文本内容,可读写

   <div>
        123
        <!-- this is comment -->
        <strong></strong>
        <span></span>
        <em></em>
        <i></i>
        <b></b>
    </div>
    <script>
        var div = document.getElementsByTagName('div')[0];
    </script>

在这里插入图片描述
在这里插入图片描述

3、nodeType(最有用)

该节点的类型,只读,返回这个 div 的所有的元素节点

在这里插入图片描述



把 div 下面所有的直接子元素节点挑出来,放在数组里面返回,不能用 children

   <div>
        123
        <!-- this is comment -->
        <strong></strong>
        <span></span>
        <em></em>
        <i></i>
        <b></b>
    </div>
    <script>
        var div = document.getElementsByTagName('div')[0];

        function retElementChild(node) {
            //no children
            var temp = {
                    length: 0,
                    push: Array.prototype.push,
                    splice: Array.prototype.splice
                },
                child = node.childNodes;
            len = child.length;
            for (var i = 0; i < len; i++) {
                if (child[i].nodeType === 1) {
                    temp.push(child[i]);
                }
            }
            return temp;
        }
        console.log(retElementChild(div));
    </script>

在这里插入图片描述

4、attributes

Element 节点的属性集合

<div id="only" class="demo"></div>
    <script>
        var div = document.getElementsByTagName('div')[0];
    </script>

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

属性名不能改,属性值可以改,但是我们一般不用这种方法
我们一般用getAttribute和setAttribute去取



5、Node.hasChildNodes()

节点的一个方法Node.hasChildNodes():
判断是否有子节点,返回值是true或false

<div id="only" class="demo">
        <span></span>
    </div>
    <script>
        var div = document.getElementsByTagName('div')[0];
    </script>

在这里插入图片描述

<div id="only" class="demo">
        <!-- this is comment -->
    </div>
    <script>
        var div = document.getElementsByTagName('div')[0];
    </script>

在这里插入图片描述

<div id="only" class="demo">

    </div>
    <script>
        var div = document.getElementsByTagName('div')[0];
    </script>

在这里插入图片描述


当且仅当这种情况下是 false(没空格,没回车)

<div id="only" class="demo"></div>
    <script>
        var div = document.getElementsByTagName('div')[0];
    </script>

在这里插入图片描述



属性的节点是 div 上面的,不是 div 里的

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值