属性 元素的内容 创建,插入和删除节点 虚拟节点

简介:

属性

html元素由一个标签和一组称为属性的名/值对组成。

HTML

表示HTML文档元素的HTMLElement对象定义了读/写属性。映射了元素的HTML属性。HTMLElement定义了通用的HTTP属性。以及事件处理程序的属性。特定的Element子类型为其元素定义了特定的属性。
举个栗子

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <img id="myimage" src="./image/1.png" title="图片"/>
    <form>
        <input type="text" name="id"/>
    </form>
</body>
</html>

js如下

var image = document.getElementById("myimage"); // 获取id为myimage的元素
var imagurl = image.src     // 获取该元素的imagurl

控制台输入如下

imagurl
"http://1.198.105.7/image/1.png"

成功获取了img元素的src地址
下面为一个form元素设置表单属性

var f = document.forms[0];    // 获取第一个form元素
f.action = "./submit/"  // 设置提交地址
f.method = "POST";  // 设置提交方式为post提交

设置完成,提交表单

http://1.198.105.7/submit/

链接跳转到上方地址,接着查看浏览器,查看提交的post数据即可查到提交的post数据

ps 不能在头部引入,会出现找不到DOM节点的情况,请在文末引入

获取和设置非标准的HTML属性

现在说的是一个html的属性,即HTMLElemnent对象定义的html的一些属性

Element.getAttribute()

该属性的获取传入属性的属性值。
将会返回一个字符串

image.getAttribute("src")
"./image/1.png"

数据集属性

可以在元素上添加属性,然后能通过js读取其数据
h5在Elemnent对象上定义了dataset属性,该属性指代一个对象,它的各个属性对于去掉前缀的data-属性,因此dataset.x的应该保存为data-x属性的值,如果后方有字符串,将会按照驼峰命名法命名data-jquery-test将会办成dataset。jqueryTest
下面生成一个火花线
html如下所示

<span class="sparkLine" data-ymin="0" data-ymax="10">
    1 1 1 2 2 3 4 5 5 4 3 5 4 3 5 3 6 2 4 5 2 4
</span>
var sparkLines = document.getElementsByClassName("sparkLine");
for (var i = 0; i < sparkLines.length; i++) {
    var dataset = sparkLines[i].dataset;    // 将自定义的属性保存在dataset中
    var ymin = parseFloat(dataset.ymin);    // 将ymin字符转换为浮点数进行存储
    var ymax = parseFloat(dataset.ymax);    // 同理获取最大值
    var data = sparkLines[i].textContent.split(" ").map(parseFloat);    // 获取节点的内容,依照空格进行分割,并将值依次转换为数值
    console.log(data);
}

可以看到控制台已经输出一个数组了。

作为attr节点的属性

一种使用Element的属性的方法。Node类型定义了attributes属性。针对非Element对象任何节点。该属性为null。
获取属性的
举例子

document.body.attributes[0];    // 获取第一个body的第一个属性
document.body.attributes.bgcolor;   // 获取bgcolor属性
document.body.attributes["NOLOAD"]  // 获取元素的onload属性 因为会自动转为大写故因此。

元素的内容

作为HTML的元素内容

以标签作为分隔

<div id="target">This is the element content!</div>
beforebegin     afterbegin              beforeend   afterend

获取内容,上方的是插入元素的内容

nodeList[0].innerHTML
以及
nodeList[0].textContent
该两个方法相同

使用innerHTML可以获取元素的内容
同样也可以使用这个方法进行更改

nodeList[0].innerHTML = "hello word"

将会把页面内容更改为hello word

script元素中的文本

内联的script元素,有一个text属性能来获取它们的文本,该文本存在于树中,但是并不会将其显示出来

作为text节点的元素内容

另一中方法处理元素的内容是当做一个子节点列表。每个子节点可能有它自己的一组子节点。
假设html如下

<span class="sparkLine" data-ymin="0" data-ymax="10">hell<span>o w</span>ord</span>
nodeList[0].innerHTML
"hell<span>o w</span>ord"
nodeList[0].textContent;
"hello word"

上方代码很明显的看到innerHTML会返回其中的HTML代码,包括标签
但是textContent不会,会把所有的内容统统返回

插入元素内容

有两个定义好的api分别是element.insertAdjacentHTML 以及 Element.insertAdjacentText()
这两个元素内容

element.insertAdjacentHTML()

这个会将文本解析为html或者xml,并且将结果插入指定的DOM树的位置。因为它不会重新解析正在使用的元素,因此它不会破坏元素内的现有元素。将会避免额外的序列化步骤,比直接innerHTML将会快很多。

document.getElementById("myimage").insertAdjacentHTML("beforebegin", html)

完成了一次在前方的插入一个div的节点。
此节点插入的html会被html解析器进行解析,如果用户插入请务必进行转义,防止小白攻击法

Element.insertAdjacentText()

这个仅仅是插入文本,建议一般使用这个,将不会产生dom树的解析

var h = document.getElementById("myH2");
h.insertAdjacentText("afterend", "My inserted text");

这样就完成了,一次dom节点的更新
即使插入

h.insertAdjacentText("afterend", "<div></div>")

也不会被dom解析

创建,插入和删除节点

创建节点

创建一个text节点

var newnode = document.createTextNode("hello word")

查看其内容

#text "hello word"

继续,创建一个正常的元素

var newnode = document.createElement("script")

将其插入id为myimage的元素后边

myimage.appendChild(newnode)

插入节点

一旦有了一个新节点可以使用Node方法的appendChild或者insertBefore()将其完成插入。
https://developer.mozilla.org/zh-CN/docs/Web/API/Node/insertBefore
https://developer.mozilla.org/zh-CN/docs/Web/API/Node/appendChild
如果调用插入的方法将文档中的一个节点再次插入,那个节点将会自动从它当前的位置删除并在新的位置重新插入,没有必要显式的删除节点,因为节点已经自动隐式删除了。

删除和替换节点

removeChild()方法重文档树中删除一个节点。该方法不在待删除的节点上调用,而是在其父节点上调用(和名字暗示那样的child)然后将其子节点删除。

n.parentNode.removeChild(n)

将会删除n节点的子节点的n节点
replaceChild()方法删除一个子节点并用一个新的节点取而代之,在父节点上调用该方法。用一个文本字符串来替换节点n

n.parentNode.replaceChild(document.createTextNode("[ REDACTED ]"), n);

一个栗子

// 用一个新的<b>元素替换n节点,并使n成为该元素的子节点
function embolden(n) {
    // 根据参数为字符串而不是节点,将其当做元素的id,进行查询得到节点,如果传入的是节点,直接进行下一步
    if (typeof n == "string") n = document.getElementById(n);
    var parent = n.parentNode;    // 获得n的父节点
    var b = document.createElement("b");    // 创建一个<b>元素
    parent.replaceChild(b, n);    // 进行替换操作
    b.appendChild(n);    // 使得n成为父节点的子节点
};

通过api完成子节点的替换,使用方法,调用一个removeChild以及parentNode完成一次调用

一个虚拟节点

var p = document.createElement("p");
undefined
p;
<p>
container.appendChild(p);
<p>
container
<div>
a;
<body>
a.appendChild(container)
<div>
p;
<p>
p.textContent = "hello word!"
"hello word!"

好啦,页面成功更新,使用虚拟节点拼接完成一个比较完成的树,在将其拼接到body的子节点中,彻底的完成节点操作

DocumentFragment

DocumentFragment 为一种特殊的Node,其作为其他节点的一个临时容器。
它的特殊之处在于它能使得一组节点被当做一个节点看待。

举栗子

倒序排列节点n的子节点

// 倒序排列节点n的子节点
function reverse(n) {
    // 创建一个DocumentFragment 座位临时容器
    var f = document.createDocumentFragment();
    // 从后到前循环子节点,使得每一个子节点移动到临时容器中
    // n的最后一个节点变成f的第一个节点
    // 每次给f添加一个节点该节点会自动从n中删除
    while(n.lastChild) f.appendChild(n.lastChild);    // 添加子节点


    // 最后,把f的所有子节点一次性全部移回n中
    n.appendChild(f);
};

insertAdjacentHTML() 将指定的文本解析为HTML或XML,并将结果节点插入到DOM树中的指定位置。

目录
相关文章
|
机器学习/深度学习 安全 大数据
揭秘!企业级大模型如何安全高效私有化部署?全面解析最佳实践,助你打造智能业务新引擎!
【10月更文挑战第24天】本文详细探讨了企业级大模型私有化部署的最佳实践,涵盖数据隐私与安全、定制化配置、部署流程、性能优化及安全措施。通过私有化部署,企业能够完全控制数据,确保敏感信息的安全,同时根据自身需求进行优化,提升计算性能和处理效率。示例代码展示了如何利用Python和TensorFlow进行文本分类任务的模型训练。
1335 6
|
算法 安全 Unix
======第五章设备管理======(3)
5.4 I/O 软件 5.4.1 I/O 软件的设计目标和原则   1) 与具体设备无关
572 0
|
1天前
|
人工智能 自然语言处理 安全
阿里云AI数智鉴密:AI 生成内容如何拿到一张"防篡改的身份证"
隐形水印 + C2PA签名:让AI生成内容“持证上岗”。
1088 0
|
10天前
|
人工智能 自然语言处理 安全
阿里云千问办公、Qoder Teams、Qoder CN区别与选择指南:模型能力、适用场景与最新活动参考
本文聚焦阿里云2026年推出的三款自研AI办公产品,清晰拆解千问办公、Qoder Teams、Qoder CN的差异化定位与能力边界:千问办公主打职场全场景提效,支持自然语言指令一键完成PPT生成、数据分析等高频办公任务;Qoder Teams面向程序员团队,深度整合AI代码生成、团队协同与企业知识库能力;Qoder CN则专为金融、政务等强合规场景打造,实现数据不出境与VPC私有化部署。文章同步给出分场景选型指南与最新活动定价,帮助不同类型的企业按需组合产品,实现业务岗、研发岗与强合规场景的AI能力全覆盖。
3628 3
阿里云千问办公、Qoder Teams、Qoder CN区别与选择指南:模型能力、适用场景与最新活动参考
|
22天前
|
人工智能 缓存 前端开发
DeepSeek Harness 首发实测 + 入门教程,夯爆了!梁神我错了
DeepSeek Harness + DeepSeek V4 Pro 项目实战保姆级教程!手把手带你从零安装开源 AI 编程工具,开发架构图、知识讲解网站、3D 网页游戏、全栈 AI 应用 4 个项目,覆盖运行模式选择、插件安装与开发,看看能不能对标 Claude。
13360 91
DeepSeek Harness 首发实测 + 入门教程,夯爆了!梁神我错了
|
15天前
|
Web App开发 人工智能 API
16 个超火的 DeepSeek Harness 插件,大肥鱼已经落后 N 个版本了。。。
DeepSeek Harness 精选插件推荐合集,从图片识别、浏览器操控、多 Agent 协作到手机远程控制,一口气带你看完 DSH 社区热门的十几个插件,覆盖技能扩展、UI 界面增强、整活玩法三大类,让你的鲸鱼变得更强。
1887 5
|
8天前
|
人工智能 监控 测试技术
Qwen3.8-Flash 来了,100万上下文、Agent、Coding 都加强了
8月26日,通义千问发布Qwen3.8-Flash-Next:125B参数、每Token仅激活6B,原生支持26万Token、可扩展至100万上下文;Coding、Agent与工具调用能力显著增强,面向真实软件工程任务,推动大模型从“回答问题”迈向“完成工作”。
|
11天前
|
人工智能 Linux iOS开发
Ollama使用教程:Ollama官网下载、Ollama本地部署大模型(2026最新)
Ollama 是一款免费开源的本地大模型运行工具,支持在 Windows/macOS/Linux 上离线运行 Qwen、DeepSeek、Llama 等主流开源模型,数据不出本机、隐私安全。提供 OpenAI 兼容 API,命令行一键拉取/运行/管理模型,无需联网,无调用限制,是开发者与 AI 爱好者部署本地 AI 助手的理想选择。(239 字)