学习前端第四十天(DOM树,遍历DOM,搜索)

一、DOM树

1、DOM,BOM

文档对象模型(Document Object Model),简称 DOM,将所有页面内容表示为可以修改的对象。

浏览器对象模型(Browser Object Model),简称 BOM,表示由浏览器(主机环境)提供的用于处理文档(document)之外的所有内容的其他对象。

2、DOM的例子

文档中的所有标签都是对象,head body html 换行,空格看不见的元素都是对象

标签被称为 元素节点(或者仅仅是元素),并形成了树状结构:<html> 在根节点,<head> 和 <body> 是其子项,等。

元素内的文本形成 文本节点,被标记为 #text。一个文本节点只包含一个字符串。它没有子项,并且总是树的叶子。

二、遍历DOM.

1、最顶层:documentElement和body

html=document.documentElement

body=document.body

最顶层的 document 节点是 document.documentElement。对应 <html> 标签。

另一个被广泛使用的 DOM 节点是 <body> 元素 —— document.body。 

拿来就用。

2、子节点,父节点,兄弟节点

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div>device</div>
    <script>
        // DOM树 文档中的所有标签都是对象,head body html 换行,空格看不见的元素都是对象

        console.log(document.documentElement);  // html
        console.log(document.body);  // body
        (document.body.parentNode);  // body的父节点,html
        (document.body.childNodes);  // body的子节点,[text, div, text, script]
        (document.body.firstChild);  // body的第一个子节点,#text
        (document.body.lastChild);   // body的最后一个子节点 ,script
        (document.body.previousSibling);   // body的上一个兄弟节点,#text
        (document.body.nextSibling); // body的下一个兄弟节点,null 没有
    </script>
</body>

</html>

 节点搜索返回的是一个类数组的可迭代对象


    <div>
        <div>device</div>
        <p>p标签</p>
        <b>b标签</b>
    </div>
    <script>
        // div 的子节点
        const div = document.body.childNodes[1]
        console.log(div.childNodes);

        // 遍历div的子节点
        for (let el of div.childNodes) {
            console.log(el);
        }

        // 将遍历div的子节点转为数组,两种方法
        console.log(Array.from(div.childNodes));
        console.log([...div.childNodes]);
    </script>

3、纯元素导航 

只考虑元素节点,不要文本节点或注释节点

  • children —— 仅那些作为元素节点的子代的节点。
  • firstElementChildlastElementChild —— 第一个和最后一个子元素。
  • previousElementSiblingnextElementSibling —— 兄弟元素。
  • parentElement —— 父元素。
<body>
    <div>
        <div>device</div>
        <p>p标签</p>
        <b>b标签</b>
    </div>
    <script>
        // 纯元素导航,去除空格换行元素
        const div = document.body.children[0];
        console.log(div.parentElement); // 父元素节点 body
        console.log(div.children);    // 所有子元素节点 [div, p, b]
        console.log(div.firstElementChild)  // 第一个子元素节点 div
        console.log(div.lastElementChild)  // 最后一个子元素节点 b
        console.log(div.previousElementSibling)  // 上一个兄弟元素节点 null
        console.log(div.nextElementSibling)  // 下一个兄弟元素节点 script

        // 例外,html的父节点不是元素,是整个文档,文档没有父节点
        console.log(document.documentElement.parentNode);  // #document
    </script>
</body>

4、表格概述 

      // 表格

        const table = document.body.children[0];

        // 表格元素
        console.log(table.rows);
        console.log(table.caption);
        console.log(table.tHead);
        console.log(table.tBodies);
        console.log(table.tFoot);

表格对象的行

        console.log(table.tHead.rows);
        console.log(table.tFoot.rows);
        console.log(table.tBodies[0].rows);
        console.log(table.tBodies[1].rows);

 表格行的单元格

        console.log(table.rows[0].cells);
        console.log(table.rows[2].cells);
        console.log(table.tHead.rows[1].cells);
        console.log(table.tBodies[0].rows[0].cells);
        console.log(table.tFoot.rows[0].cells);

// tr.sectionRowIndex —— 给定的 <tr> 在封闭的 <thead>/<tbody>/<tfoot> 中的位置(索引)

// tr.rowIndex —— 在整个表格中 <tr> 的编号(包括表格的所有行)

        console.log(table.tFoot.rows[0].sectionRowIndex);  // 0

        console.log(table.tFoot.rows[0].rowIndex);  // 4

// td.cellIndex —— 在封闭的 <tr> 中单元格的编号。

        console.log(table.rows[0].cells[1].cellIndex); // 1

三、搜索

1、document.getElementById(“id”)

注意:此“id”必须唯一

<body>
    <div id="box"> hello div</div>
    <p id="p">p</p>
    <b id="b">bbb</b>

    <script>
        // 根据id进行搜索返回  getElementById
        const boxEl = document.getElementById("box");
        console.log(boxEl);
        const pEl = document.getElementById("p")
        console.log(pEl);
        const bEl = document.getElementById("b")
        console.log(bEl);
    </script>
</body>

2、querySelectorAll(css)最通用

document.querySelectorAll(“”)返回 elem 中与给定 CSS 选择器匹配的所有元素。

<body>
    <div class="d1"> hello <b>bb</b> div1</div>
    <div class="d1"> hello <b>bb</b> div2</div>
    <div> hello <b>bb</b> div3</div>
    <div> hello <b>bb</b> div4</div>
    <p class="d1">品牌</p>
    <script>
        //  querySelectorAll  返回与给定 CSS 选择器匹配的所有元素。
        console.log(document.querySelectorAll("div"))    // 返回所有div标签
        console.log(document.querySelectorAll("div b"))  // 返回所有在div标签中的b标签
        console.log(document.querySelectorAll(".d1"))    // 返回所有class为“d1”的标签
        console.log(document.querySelectorAll(".d1 b"))  // 返回所有class为“d1”的标签中的b标签
        console.log(document.querySelectorAll("b"))
    </script>
</body>

 3、querySelector

document.querySelector(“”)返回给定 CSS 选择器的第一个元素

<body>
    <div class="d1"> hello <b>bb</b> div1</div>
    <div class="d1"> hello <b>bb</b> div2</div>
    <div> hello <b>bb</b> div3</div>
    <div> hello <b>bb</b> div4</div>
    <p class="d1">品牌</p>

    <script>
        // querySelector 返回给定 CSS 选择器的第一个元素
        console.log(document.querySelector("div"))    // 返回第一个div元素
        console.log(document.querySelector("div b"))  // 返回第一个在div标签中的b元素

        console.log(document.querySelector(".d1"))    // 返回第一个class为“d1”的元素
        console.log(document.querySelector(".d1 b"))  // 返回第一个class为“d1”的标签中的b元素

    </script>
</body>

4、matches

document.elem.matches(“ ”)

检查 elem 是否与给定的 CSS 选择器匹配。它返回 true 或 false

<body>
    <div class="d1"> hello <b>bb</b> div1</div>
    <div class="d1"> hello <b>bb</b> div2</div>
    <div> hello <b>bb</b> div3</div>
    <div> hello <b>bb</b> div4</div>
    <p class="d1">品牌</p>
    <a href="https://www.baidu.com/"></a>
    <script>
        // match 检查某个对象是否可以用某个选择器选中,返回true ,false
        const divS = document.querySelectorAll("div")
        console.log(divS[0].matches(".d1"))        // true
        console.log(divS[0].matches("body div"))   // true
        console.log(divS[3].matches("body .d1"))   // false
        console.log(divS[0].matches("body #div"))  // false
        console.log(document.body.children[5].matches("a"))
    </script>
</body>

5、closest

elem.closest(“ ”) 

查找与 CSS 选择器匹配的最近的祖先并返回。elem 自己也会被搜索。

<body>
    <div class="d2">
        <p id="d1"> hello <b id="b1">bb</b> div1</p>
        <div class="d1"> hello <b>bb</b> div2</div>
        <div> hello <b>bb</b> div3</div>
        <div> hello <b>bb</b> div4</div>
        <p class="d1">品牌</p>
    </div>
    <script>
        // closet 查找与 CSS 选择器匹配的最近的祖先
        const b = document.getElementById("d1")
        console.log(b.closest("div"))
    </script>
</body>

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值