JavaScript(五)---【DOM】

发布于:2024-04-03 ⋅ 阅读:(88) ⋅ 点赞:(0)

零.前言

JavaScript(一)---【js的两种导入方式、全局作用域、函数作用域、块作用域】-CSDN博客

JavaScript(二)---【js数组、js对象、this指针】-CSDN博客

JavaScript(三)---【this指针,函数定义、Call、Apply、函数绑定、闭包】-CSDN博客

JavaScript(四)---【执行上下文、hoisting(提升)、严格模式、事件】-CSDN博客

一.DOM简介

1.1什么是DOM

当网页被加载时,浏览器会创建页面的文档对象模型,也就是DOMDocument Object Model

每个HTML都可以被视为一个文档树DOM为这个文档树提供了一个编程接口,开发者可以使用JS来操作这个树。

1.2文档树能干什么

文档树可以干的事情非常多,基本上所有可以想到的功能,都可以利用JS+文档树来实现。

  • JS能够改变页面中的所有HTML元素
  • JS能够改变页面中的所有HTML属性
  • JS能够改变页面中的所有CSS样式
  • JS能在页面中创建新的HTML事件

二.DOM方法

2.1概括

DOM中,所有的HTML都被定义为:“对象”,故下文中的所有“对象”都指的是“HTML元素

另外,在DOM中还有:“方法”、“属性·”两个概念。

方法”:“指能够在HTML上执行的动作

属性”:“能够设置或改变HTML元素的内容()”

例如:

    <h1 id="demo"></h1>
    <script>
        document.getElementById("demo").innerHTML = "这是一个例子."
    </script>

效果:

其中,“getEelmentById”是一个“方法”,而“innerHTML”是一个“属性

这段代码的作用就是修改<p>标签的内容

2.2常见的DOM方法【查找】

以下是四种通过不同“关键字”来查找HTML元素的方法

  • document.getElementById(id):通过元素id来查找
  • document.getElementByTagName(name):通过标签名来查找
  • document.getElementByClassName(name):通过类名来查找
  • document.querySelectorAll(id、类名、类型、属性、属性值等等):通过“CSS选择器” 来查找

值得注意的是:“上述的idname都必须用双引号包裹

2.3常见的DOM方法【改变HTML元素】

以下是四种改变HTML元素属性的方法:

  • elements.innerHTML新内容:改变元素的内容
  • elements.attribute新属性值:改变元素的属性值(这里的attribute是具体的属性名)
  • elements.setAttribute(属性名,新属性值):改变元素的属性值
  • elements.style.property新样式:改变元素的CSS样式

例如,我想要修改<input>输入框的文本类型由“text”变为“password”,可以如下使用:

    <input type="password" id="demo">
    <script>
        document.getElementById("demo").type = "password"
    </script>

2.4常见的DOM方法【添加和删除元素】

以下是五种添加、删除HTML元素的方法:

  • document.createElement(element):创建HTML元素
  • document.removeChild(element):删除HTML元素
  • document.appendChild(element):添加HTML元素
  • document.replaceChild(element):替换HTML元素
  • document.write(text):写入HTML输出流

2.5常见的DOM问题

1.NodeList与HTMLCollection

HTMLCollection”是HTML元素的集合(数组),而NodeList是“文档节点”集合的一个对象

这两者几乎相同,但是本质上不同

HTMLColeection一个数组,可以使用数组的方法来对它修改,如“pop()、join()”方法等

但是NodeList一个文档节点总和的对象,这个对象无法使用数组的方法

同时NodeList只能使用下标来访问内部元素,而HTMLCollection可以使用“下标索引、元素名、id

我们用一个例子来说明两者区别:

<body>
    <h1 class="sample">Hello World</h1>
    <h1 class="sample">这是一个例子</h1>
    <h1 class="sample">这是一个例子</h1>
    <p id="sample"></p>
    <script>
        var list = [1,2,3,4,5,6]
        var x = document.querySelectorAll("h1.sample");
        console.log(list);
        console.log(x);
    </script>
</body>

 效果:

注意到两者的“Prototype”类型,一个是“Array数组,另一个是“NodeList” 对象

2.使用“类名”、“标签名”查询返回的是一个“数组

在使用“类名”、“标签名”来查询元素时,返回的是一个包含“所有符合条件”的元素的“NodeLsit”。
例如我们使用“标签名”查询

<body>
    <h1>我是第一个h1标签</h1>
    <h1>我是第二个h1标签</h1>
    <h1>我是第三个h1标签</h1>
    <h1>我是第四个h1标签</h1>
    <h1>我是第五个h1标签</h1>
    <script>
        var x = document.getElementsByTagName("h1");
        console.log(x);
    </script>
</body>

效果:

3.使用document.createElement()创建节点时

对于任何一个元素,它由两部分组成:“元素节点”和“文本节点

元素节点”:“代表这个元素

文本节点”:“元素内的内容

我们可以使用“document.createTextNode”来创建一个文本节点,再把这个节点添加到我们的元素节点中即可

<body>
    <h1>我是第一个h1标签</h1>
    <h1>我是第二个h1标签</h1>
    <h1>我是第三个h1标签</h1>
    <h1>我是第四个h1标签</h1>
    <h1>我是第五个h1标签</h1>
    <script>
        var body = document.getElementsByTagName("body")[0]
        var x = document.createElement("p");
        var node = document.createTextNode("这是一个由JS生成的p标签");
        x.appendChild(node);
        body.appendChild(x);
    </script>
</body>

效果:

4.使用CSS选择器查找标签时

使用CSS选择器查找符合条件的标签时,返回的是一个“所有符合条件”的"NodeList"。

例如:

<body>
    <h1 class="sample">Hello World</h1>
    <h1 class="sample">这是一个例子</h1>
    <h1 class="sample">这是一个例子</h1>
    <p id="sample"></p>
    <script>
        var x = document.querySelectorAll("h1.sample");
        console.log(x);
    </script>
<body>

结果:

通过NodeList,我们可以实现一些功能:

<body>
    <h1 class="sample">Hello World</h1>
    <h1 class="sample">这是一个例子</h1>
    <h1 class="sample">这是一个例子</h1>
    <p id="sample"></p>
    <script>
        var x = document.querySelectorAll("h1.sample");
        console.log(x);
    </script>
    <script>
        var text = "";
        for(let i = 0;i < x.length;i++){
            text += x[i].innerHTML + "<br>";
        }
        document.getElementById("sample").innerHTML = text;
    </script>
</body>

效果:


网站公告

今日签到

点亮在社区的每一天
去签到