jsDOM

js Dom
DOM本质:

DOM树是结构,树是由DOM元素和属性节点组成的,DOM的本质是把html结构化成js可以识别的树模型;
有了树模型,就有了层级结构,层级结构是指元素和元素之间的关系父子,兄弟。

Dom节点的Attribute和Property有和区别?

Attribute:修改html的属性,会改变html结构。
Property:修改对象属性,不会体现到html中。

DOM 节点操作:

  • 新增节点
  • 查询子节点
  • 查询父节点
  • 删除节点
1. 创建新节点  (document调用)
createDocumentFragment() //创建一个DOM片段
createElement() //创建一个具体的元素
createTextNode() //创建一个文本节点
2. 添加、移除、替换、插入  (父元素调用)
appendChild() //添加
removeChild() //移除
replaceChild() //替换
insertBefore() //插入
3. 查找 (document调用)
getElementsByTagName() //通过标签名称 一组元素
getElementsByName() //通过元素的Name属性的值 一组元素
getElementById() //通过元素Id,唯一性单个元素
getElementByClassName()//通过c元素lass获取  一组元素
qurySelectorAll('选择器') // 通过选择器获取一组元素
querySelector("选择器") // 通过选择器获取单个元素
4. 关系  (元素调用前三个父元素调用 )
childNodes // 获取所有的子节点
children  // 获取所有的子元素节点 (常用)
firstElementChild   获取第一个元素
lastElementChild  获取最后一个元素
parentNode	获取当前节点的父节点
previousElementSibling	获取当前节点的前一个兄弟元素
nextElementSibling 获取当前节点的后一个兄弟元素 

Dom性能:
在这里插入图片描述

比如上面那个例子,就可以先建立一个文档片段,然后把你for循环想要插入文档中的统一插出文档片段中,最后在插入文档树,就是dom中,这样比一次一次插入性能要好很多。

### 关于 JSDOM 的学习笔记 JSDOM 是一个用于在 Node.js 环境下模拟浏览器行为的库。它允许开发者创建虚拟 DOM 和执行基于 DOM 的操作,而无需实际运行在一个完整的浏览器环境中[^6]。 #### 什么是 JSDOMJSDOM 提供了一个轻量级的 HTML 解析器和 DOM 实现,能够解析 HTML 文档并将其转换为可编程的对象模型。这使得开发者可以在服务器端处理网页内容、测试前端代码以及构建无头浏览器环境下的自动化工具[^7]。 以下是几个常见的应用场景: - **爬虫开发**:利用 JSDOM 抓取动态加载的内容。 - **单元测试**:模拟真实的浏览器环境以测试前端逻辑。 - **HTML 渲染服务**:生成静态页面或将模板渲染成最终的 HTML 输出。 #### 安装与初始化 要开始使用 JSDOM,请先安装依赖包 `jsdom`: ```bash npm install jsdom ``` 接着可以通过以下方式引入模块并创建一个新的文档实例: ```javascript const { JSDOM } = require("jsdom"); // 创建一个简单的 HTML 字符串作为初始输入 const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`, { url: "https://example.org/", }); console.log(dom.window.document.querySelector("p").textContent); ``` 上述例子展示了如何定义基本结构并通过查询选择器访问节点[^8]。 #### 动态修改 DOM 节点 除了读取现有内容外,还可以借助 JSDOM 修改已有的 DOM 结构。比如新增子元素或者调整属性值等操作均支持标准 W3C 接口调用模式[^9]: ```javascript const { JSDOM } = require("jsdom"); let dom = new JSDOM(`<div id="container"></div>`); let containerElement = dom.window.document.getElementById('container'); if (containerElement){ let paragraphNode = dom.window.document.createElement('p'); paragraphNode.textContent = 'This is a dynamically added text.'; // 将新段落追加至容器内部 containerElement.appendChild(paragraphNode); } console.log(dom.serialize()); /* Output should be similar to: <html> <head></head> <body> <div id="container"><p>This is a dynamically added text.</p></div> </body> </html>*/ ``` 此片段说明了怎样向空白 div 中注入新的 p 标签及其文本填充过程[^10]。 #### 处理外部资源请求 当涉及到 AJAX 或者其他网络交互时需要注意,默认情况下所有的 fetch 请求会被拦截下来并不会真正发送出去除非特别配置允许联网选项[^11]。 如果想让某些特定 URL 可被正常载入,则可以自定义设置 resourceLoader 参数: ```javascript const { JSDOM } = require("jsdom"); new JSDOM( `<img src="/image.jpg">`, { resources: "usable", runScripts:"outside-only" } ).then((domInstance)=>{ console.log(domInstance.window.Image.prototype.toString()); }); ``` 这里启用了图片标签加载机制同时开启了脚本执行权限以便更贴近真实场景需求[^12]. --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值