# @beforesemicolon/html-parser 中文文档

规范地址：https://npmcn.com/package/%40beforesemicolon/html-parser/

版本：0\.11\.0
npm 元数据更新时间：2026-07-26T22:00:59.566Z
中文译文更新时间：2026-11-07T21:06:32.148Z
软件包许可：BSD-3-Clause

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40beforesemicolon/html-parser
原文对照：https://npmcn.com/package/%40beforesemicolon/html-parser/?lang=original
项目主页：https://github.com/beforesemicolon/html-parser#readme
源码仓库：https://github.com/beforesemicolon/html-parser

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：78.6 kB，19 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2023-07-20T00:53:50.837Z
- 最新版本发布：2026-07-26T22:00:59.390Z
- 近 30 天下载量：2547（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：16（近 12 个月 2 个）

## 中文简介

任何 Javascript 运行时环境的 HTML 解析器

## 安装

```sh
npm install @beforesemicolon/html-parser
```

也可以使用：`pnpm add @beforesemicolon/html-parser`、`yarn add @beforesemicolon/html-parser`、`bun add @beforesemicolon/html-parser`

## README

# HTML 解析器

任何 Javascript 运行时环境的 HTML 解析器 。 小,快,容易使用,而且高度定制

[![npm](https://img.shields.io/npm/v/%40beforesemicolon%2Fhtml-parser)](https://www.npmjs.com/package/@beforesemicolon/html-parser) ![npm](https://img.shields.io/npm/l/%40beforesemicolon%2Fhtml-parser) [![Test](https://github.com/beforesemicolon/html-parser/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/beforesemicolon/html-parser/actions/workflows/test.yml)

## 动机

大多数 HTML 解析器会强制您在解析结果后学习他们的 Javascript API . 他们不会允许你进入处理程序 进入解析的节点 或者让你自己创建API 最终结果 适应您的项目 而不是相反.

此解析器

-   是一个最快的 HTML 解析器 。 检查 [基准](https://npmcn.com/package/%40beforesemicolon/html-parser/#readme-benchmark)。 。 。 .
-   使用像 API 那样的 DOM, 它是一个自定义的 Lite DOM 为性能而构建的
-   可以使用浏览器 DOM API 或 JsDOM 给您解析的 HTML , 允许它在任何 js 运行时环境中使用
-   你可以用你自己的东西 [自定义 DOM API](https://npmcn.com/package/%40beforesemicolon/html-parser/#readme-creating-your-custom-handler) 喜欢获得绝对控制
-   接受回调, 这样您就可以访问正在解析的节点
-   超简单的使用。 不需要详尽的选项列表. 以表演的方式解释一切
-   处理 SVG 和 HTML 方便地包含带有 HTML 的注释和脚本标记

## 安装

#### 节点

```
npm install @beforesemicolon/html-parser
```

#### 浏览器

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

  <!-- Grab the latest version -->
  <script src="https://unpkg.com/@beforesemicolon/html-parser/dist/client.js"></script>

  <!-- Or a specific version -->
  <script src="https://unpkg.com/@beforesemicolon/html-parser@1.0.0/dist/client.js"></script>

</head>
<body></body>
</html>
```

###### 很高兴知道

-   只与 HTML 和 SVG 标签合作. D!
-   默认处理自定义标签、样式、脚本标签和注释,而性能没有差异
-   `<!Doctype>` 标签被忽略
-   通过保留所有返回为文本节点的空白来尊重格式

### 使用量

默认情况下,它将返回一个文档片段作为根 。 API类似DOM,意思是,如果你知道DOM API 你已经知道这一点。 类似 DOM 的 API 是最小的,并且为性能而构建的, 允许您轻松 在浏览器,节点,德诺或任何其他javascript运行时环境中使用相同的代码.

见 [自定义处理器区域](https://npmcn.com/package/%40beforesemicolon/html-parser/#readme-creating-your-custom-handler) 来理解这个类似文档的 API 的外观 .

```js
import {parse} from "@beforesemicolon/html-parser";

const frag = parse('<h1>site title</h1>'); // return DocumentFragment-like object

frag.children[0] // h1 Element
```

这个解析器与 [DOM API (英语)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) 如果您想在节点、德诺或任何 Javascript 运行时环境中使用, 确保导入 [jsdom (英语)](https://www.npmjs.com/package/jsdom) 或类似情况,并提供 [文档](https://developer.mozilla.org/en-US/docs/Web/API/Document) 对象.

```js
import * as jsdom from "jsdom";
const {JSDOM} = jsdom;
const document = new JSDOM('').window.document;

// import the parser
import {parse} from "@beforesemicolon/html-parser";

const frag = parse('<h1>site title</h1>', document); // return DocumentFragment

frag.children[0] // h1 Element
```

#### 浏览器

```html
<script>
  const {parse, Doc} = window.BFS;
  
  // uses a like Document-like object by default
  const frag1 = parse('<h1>site title</h1>'); // returns DocumentFragment-like
  
  // use the native DOM Document object
  const frag2 = parse('<h1>site title</h1>', document); // returns DocumentFragment object
  
  frag1.children[0] // h1 Element
  frag2.children[0] // h1 Element
</script>
```

#### 回调选项

您也可以通过调用函数作为第二个参数, 当节点被解析时调用 和创造。 这将使用文档作为默认值, 这样调用时将调用 DOM 节点和元素 .

```js
const frag = parse('<h1>site title</h1>', (node) => {
  // handle node here
});
```

### 基准

如果快速, 解析器本身会有所不同, 但取决于您在最终解析结果中使用的 API 他们的算法。 以下是两个使用 [htmlparser 基准标记](https://github.com/AndreasMadsen/htmlparser-benchmark)。 。 。 .

```ts
import {parse} from "@beforesemicolon/html-parser";

parse(aReallyMassimeHTMLString);
// avg duration: 1.86113 ms/file ± 1.09698
```

这比DOM文档 API快30倍

#### 使用 jsdom 文档

这是使用自定义 [jsdom (英语)](https://www.npmjs.com/package/jsdom) 在节点J中:

```ts
import * as jsdom from "jsdom";
import {parse} from "@beforesemicolon/html-parser";

const {JSDOM} = jsdom;
const document = new JSDOM('').window.document;

parse(aReallyMassimeHTMLString, document);
// avg duration: 27.3563 ms/file ± 19.1060`
```

### 创建您的自定义处理器

这个解析器的最好之处是 能够把自己的处理器装入箱子 将 HTML 转换成任何您喜欢的 .

以下是一个简单执行的例子,你可以从这里开始.

```ts
const MyCustomDoc = {
    createComment: (value: string) => ({type: 'comment', value}),
    createTextNode: (value: string) => ({type: 'text', value}),
    createDocumentFragment: () => {
        const children: unknown[] = []

        return {
            type: 'fragment',
            children,
            appendChild: (node: unknown) => {
                children.push(node)
            }
        }
    },
    createElementNS: (namespaceURI: string, tagName: string) => {
        const children: unknown[] = []
        const attributes: Record<string, unknown> = {}

        return {
            namespaceURI, // important to ALWAYS include
            tagName,
            children,
            attributes,
            type: 'node',
            appendChild(node: unknown) {
                children.push(node)
            },
            setAttribute(name: string, value: string) {
                attributes[name] = value;
            }
        }
    },
}

const result = parse<typeof MyCustomDoc>(`...`, MyCustomDoc);
```

## 常见问题

### @beforesemicolon/html-parser 是什么？

任何 Javascript 运行时环境的 HTML 解析器

### 如何安装 @beforesemicolon/html-parser？

在项目目录运行 npm install @beforesemicolon/html-parser，或使用 pnpm add / yarn add / bun add。

### @beforesemicolon/html-parser 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @beforesemicolon/html-parser 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @beforesemicolon/html-parser 可以商用吗？

@beforesemicolon/html-parser 使用 BSD-3-Clause 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。另外不得用原作者名义为衍生产品背书。以上为概括，不构成法律意见，请以许可原文为准。

### @beforesemicolon/html-parser 的下载量有多少？

根据 npm 官方下载统计，@beforesemicolon/html-parser 在 2026/10/08 – 2026/11/06 这 30 天内被下载 2,547 次，日均约 85 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @beforesemicolon/html-parser 还在维护吗？

最新版本 0\.11\.0 发布于 2026/07/27（3 个月前）；至今共发布 16 个版本，其中过去 12 个月发布了 2 个；首次发布于 2023/07/20。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

