jsdom

本文详细介绍了DOM(文档对象模型)的基本概念及操作方法,包括节点类型、JS代码放置位置的选择、节点的获取与创建、属性的读写、文本节点的操作等,并提供了一些实用技巧。
1. DOM Document Object Model(文本对象模型)

2. 节点及其类型
    element node、attribute node、text node;
    text node是element node的子节点;
    
3. JS写在什么地方
    1).HTML代码和JS代码耦合在一起
    缺点:不利于代码维护
        <button onclick="alert('hello..')">ClickMe</button>
    2).放在html文档的最后
    缺点:不符合JS代码的习惯
    3).放在title标签后
        缺点:为加载完文档就已经执行
        应对方案:使用window.onload = funtion(){代码块}
        
4.获取节点
    对象.getElementsByTagName();
    对象.getElementById();
    对象.getElementsByName();
    返回对应对象下的元素
    
5.若HTML元素自身没有定义name属性,使用getElementsByName()对IE无效。

6.读写属性
    获得元素节点,通过节点.属性直接获取属性,
    通过节点.属性=属性值;实现属性的赋值。
        var nameNode = document.getElementById("name");
        alert(nameNode.value);
        nameNode.value="你好";
        
7.获取元素节点的所有子节点
    1).获取元素节点。
    2).利用元素节点的childNodes方法获取子节点
    var cityNode = document.getElementById("city");
    alert(cityNode.childNodes.length);//不同浏览器结果可能不同

8.获取元素节点的指定子节点
    元素.getElementsByTagName();
    
9.获取第一个和最后一个子节点
    元素.firstChild;获取第一个子节点
    元素.lastChild;获取最后一个子节点
    
10.获取文本节点
    1).获取文本元素所在节点
    2).通过firstChild获取文本节点 //因为文本节点是唯一的
    3).获取文本节点的nodeValue属性来获取文本节点的值
        var bjNode = document.getElementById("bj");
        var bjTextNode = bjNode.firstChild;
        var bjValue = bjTextNode.nodeValue;
        
    4).可以更改文本信息
        bjTextNode.nodeValue="hello";
        
11.添加事件时,方法中若还用到当前节点,使用this,不使用节点的引用。

12. /g表示全局标志

13.字符串.replace(reg, str); 将字符串中符合reg的替换成str

14.正则表达式.test(var str);返回boolean 表示是否符合表达式

15.节点的属性
    nodeName只读
    nodeType只读
    nodeValue可读可写
    
16.创建元素节点
    var liNode = docuemnt.createElement("节点名");
    创建文本节点
    var xmText = document.createTextNode("文本值");
    
    
    添加元素节点
    节点.appendChild(节点名);//添加到节点的最后一个
    
17.查看radio类型是否被选中使用checked属性
    type[1].checked;若被选中,返回true,否则返回false
    
18.button的监听事件时,若最后返回false,则不会提交。

19.替换节点
    a.找到所要替换的节点i,j
    b.找到被替换节点的父节点i.partenNode
    c.使用replaceChild(新节点,旧节点);
    
20.删除节点,同时删除子节点
    父节点.removeChild();
    
21.comfirm()弹出确认对话框,返回一个boolean类型。

22.插入节点insertBefore(新节点,位置节点);
父节点.insertBefore();

23.innerHtml属性 表示节点内的所有内容

24.使用for(){}时,若删除节点nodes[i],每次删除完之后会刷新,可能出现数组越界,应使用node[0];每次删除第一个元素,直到删除完。

25.克隆节点
    cloneNode(true);表示克隆的同时也包含其子节点
    cloneNode();克隆节点,不包含子节点
<think> 我们参考提供的引用内容,用户想了解在npm中使用jsdom的方法及相关信息。根据引用[2]和引用[3],我们可以整理出以下几个关键点: 1. **jsdom是什么**:jsdom是一个纯JavaScript实现的DOM(文档对象模型),它可以在Node.js环境中模拟出DOM环境,使得依赖DOM的库(如jQuery)能够在Node.js中运行。 2. **安装jsdom**:通过npm(Node.js包管理器)进行安装。引用[3]提到需要先确保npm已安装(通过`npm -v`检查版本),然后使用管理员权限安装jsdom。值得注意的是,引用[3]还提到在安装jsdom之前建议先安装`node-gyp`(一个用于编译原生插件模块的工具),但实际上,对于jsdom的基本使用,通常不需要特别安装`node-gyp`,因为jsdom本身是纯JavaScript的,除非涉及到需要编译的依赖项。 3. **使用jsdom**:引用[2]给出了一个简单的使用示例,包括: - 引入jsdom库 - 创建JSDOM实例,传入HTML字符串 - 使用DOM API(如`querySelector`)操作DOM - 结合jQuery使用 因此,我们可以给用户提供以下信息: **安装jsdom**: 在项目目录下,使用npm安装jsdom(确保已经安装了Node.js和npm): ```bash npm install jsdom ``` 注意:通常不需要管理员权限,但如果遇到权限问题,可以使用管理员权限运行命令行。 **基本使用**: 在Node.js脚本中,可以这样使用jsdom: ```javascript // 引入jsdom const { JSDOM } = require("jsdom"); // 创建JSDOM实例,传入HTML字符串 const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`); // 使用DOM API const paragraph = dom.window.document.querySelector("p").textContent; console.log(paragraph); // 输出: Hello world // 如果想使用jQuery,需要先安装jquery:npm install jquery const $ = require("jquery")(dom.window); console.log($('p').text()); // 输出: Hello world ``` **常见问题**: 1. 如果安装过程中遇到编译错误,可能需要安装编译工具(如node-gyp)和Python(node-gyp需要),具体请参考node-gyp的安装文档。 2. 注意:jsdom模拟的是DOM环境,但不是完整的浏览器,所以一些浏览器特有的API(如WebGL)可能不支持。 **高级用法**: jsdom还支持许多配置项,例如设置URL、运行脚本、加载外部资源等,具体可以参考官方文档。 根据以上内容,我们可以生成相关问题。 §§相关问题§§ 1. jsdom能否模拟浏览器事件(如点击事件)? 2. 在jsdom中如何处理异步加载的资源? 3. jsdom和Puppeteer/PhantomJS有什么区别? </think> ### npm中使用jsdom的方法及信息 jsdom是一个纯JavaScript实现的DOM环境,允许在Node.js中模拟浏览器环境,使依赖DOM操作的库(如jQuery)能在Node.js中运行。 #### 安装jsdom ```bash # 在项目目录中执行 npm install jsdom ``` 若遇到编译问题,可能需要先安装编译工具: ```bash npm install node-gyp@latest -g ``` #### 基本使用方法 ```javascript const { JSDOM } = require("jsdom"); // 1. 创建虚拟DOM环境 const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`); // 2. 使用原生DOM API console.log( dom.window.document.querySelector("p").textContent // "Hello world" ); // 3. 结合jQuery使用 const $ = require("jquery")(dom.window); console.log($('p').text()); // "Hello world" ``` #### 关键特性 1. **标准兼容**:实现HTML DOM标准,支持选择器、事件等 2. **资源加载**:可配置加载外部资源(CSS/图片) ```javascript const dom = new JSDOM(``, { url: "https://example.com/", resources: "usable" }); ``` 3. **脚本执行**:支持执行内联/外部JavaScript ```javascript const dom = new JSDOM(`<script>document.body.innerHTML = '动态内容'</script>`, { runScripts: "dangerously" }); ``` #### 典型应用场景 1. 服务端HTML解析和操作 2. 单元测试(替代Puppeteer等重量级方案) 3. 爬虫开发(提取/修改网页内容) 4. 服务端渲染(SSR)辅助工具
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值