SEO基础

SEO基础

Products

当前位置:首页 > SEO基础 >

WangEditor如何自定义标签属性?

96SEO 2026-08-01 19:33 5


背景

业务背景

前几个月做了一个业务文档风险分析的 AI 助理——将使用者上传的业务文件用 AI 协助分析并展示这份文档存在的所有风险点。里面有一个类似这样的需求:

  • 左侧展示业务文档原文,右侧展示 Agent 后的风险点列表;
  • 点击右侧某个风险点时根据风险点的原文段落。左侧自动滚动到对应位置,类似锚点功能。

前端实现锚点有很多种方案。但这里场景有所不同:我们会将使用者上传的 pdf、word 文件解析成 html 字符串并由服务端返回,前端根据这份 html 字符串渲染文档原文,在渲染后的内容中实现类似锚点交互。

WangEditor如何自定义标签属性?

项目中已经有使用 WangEditor 的富文本编辑器来渲染文档原文。为了保持统一、减少维护成本,也一样选择使用 WangEditor 实现此功能,所以问题归结为:如何在 WangEditor 渲染中实现锚点交互,并保留自定义标签与属性。

痛点概述

  • 富文本渲染丢失自定义属性:WangEditor 默认会过滤未知标签和属性,导致我们想要插入的自定义 “risk” 标签与其数据属性被剔除。
  • 锚点定位不精准:常规 HTML 锚点只能定位到元素顶部,而需要精准定位到文本段落内部的位置。
  • 跨版本兼容性:当文档内容或结构发生变化时旧的 anchor 链接可能失效,需要有机制检测并提示使用者。
  • 前后端协作成本高:传统方案需要后端提供 anchor ID 并维护版本信息,容易出现同步延迟或接口错误。怎么说呢,

方案调研

飞书 - 复制选区链接

交互流程

飞书里有一个复制选区链接功能:点击后会复制一个包含页面 ID、块 ID、选区索引等信息的链接。打开该链接时飞书会自动滚动到对应位置,并根据版本控制判断是否有效。

实现方案


/* 前端请求 /create 接口 */
{
page_id,block_id,src_start_idx,src_end_idx。src_version,structure_version
}
/* 后端返回 anchor_id */
const link = `https://xxxx.feishu.cn/...#share-${anchorId}`;/* 前端解析 link 并请求 /anchor_info */
{
block_id,src_start_idx。src_end_idx
}
/* 前端计算偏移量并滚动 */
window.scrollTo;

痛点:

  • - 前后端配合复杂;- 页面加载时需等待接口响应导致滚动延迟;- 如果版本变更导致 block_id 不存在需要额外提示。话说回来,

语雀 - 原生锚点方案

交互流程

语雀采用传统 HTML 锚点:目录中的 `

实现方案


  • - 必须给每个目标元素手动添加 `id`;- 对大量动态生成内容逐一添加 `id` 不现实;- 无法在同一段落内嵌入多个可点击风险标记而不破坏排版。

最终方案 - 使用 WangEditor 自定义标签与属性实现锚点交互

The idea is to render risk points as a custom inline‑void element `` that keeps its own `data-anchor-id`. When a risk point is clicked on right panel。we look up its anchor ID and scroll editor view to that element.

1️⃣ 明确自定义标签的数据结构


const myRisk = {
从type来看,"risk",attrs: { "data-anchor-id": anchorId },riskText: domElem.innerText || "",children: // void node 必须有 children
};
  • `type` 用于告诉编辑器这是一个特殊节点;- `attrs` 保存自定义属性,以便渲染时写回 DOM;- `children` 必须包含空字符串,否则 Slate会报错。

2️⃣ 根据场景重写 isInline 与 isVoid 方法


import { DomEditor } from "@wangeditor/editor";export function withRisk {
const { isInline,isVoid } = editor;editor.isInline = elem => {
return DomEditor.getNodeType === "risk"?true : isInline;},editor.isVoid = elem => {
return DomEditor.getNodeType === "risk"?true : isVoid;},说起来,return editor;}
  • `isInline:true` → risk 节点可以与文字混排;- `isVoid:true` → risk 节点没有子内容,仅是整体占位符。这样 Slate 能正确处理它们。

3️⃣ 渲染自定义元素

javascript import { h } from 'snabbdom';

function renderRisk { const iconVnode = h('img',{ props的观点是。 {src:'https://example.com/icon.png'},style:{width:'1em',margin:'0 .1em'} });

return h('span',{
props的观点是,{contentEditable:false}。style:{marginLeft:'5px',color:'orange'},on:{click{ console.log }},attrs:{'data-anchor-id':elem.attrs}
},);

}

  • 说到`attrs。` 把自定义属性写回真实 DOM,从而在页面上可见。

javascript const renderElemConf = { 说到type。"risk",renderElem: renderRisk };

4️⃣ 自定义 HTML 解析规则

javascript const parseTemplateConf = { selector:"doc-risk",parseElemHtml{ const anchorId=domElem.getAttribute||"";return { type的观点是,"risk",attrs:{'data-anchor-id':anchorId}。riskText:domElem.innerText||"",children: };} },

*坑说明*

  • A 当 selector 写成 `

    ` 或 `` 时 parseElemHtml 不会触发,因为这些标签已被 Wangeditor 内置过滤;必须使用全新的自定义标签 `` 并保证不被其它元素包裹。

javascript import { Boot } from "@wangeditor/editor";import { withRisk } from "./withRisk";import { renderElemConf } from "./renderConfig";import { parseTemplateConf } from "./parseConfig";其实,

Boot.registerPlugin;Boot.registerRenderElem;Boot.registerParseElemHtml;

完整 React 示例

javascript import React。{useEffect,useRef,useState} from 'react';import { Editor } from '@wangeditor/editor-for-react';import '@wangeditor/editor/dist/css/style.css';import './App.css';

function App{ const =useState;const wrapperRef=useRef;

const html=

This is normal text

This is risky content

;按理说,

useEffect=>{ ifreturn;editor.clear;话说回来,editor.dangerouslyInsertHtml;话说回来,editor.disable;return =>editor.destroy;},),

return (

);} export default App;话说回来,


使用者痛点评价

痛点 本方案解决方式 成本
富文本默认过滤未知标签/属性 注册 registerParseElemHtml + 自定义 tag 少量代码改动
锚点定位不到具体段落 data-anchor-id 在节点内部精确定位 简单
多版本/变更导致旧链接失效 可通过前后端接口返回最新 block_id 检查 与后台保持同步即可

小结

WangEditor 可以通过 registerParseElemHtml 配合 inline/void 插件Snabbdom 渲染 来保留自定义标签及其属性。从而在富文本渲染中实现精确的锚点交互。主要是的观点是,

  1. 选择独立且未被过滤的自定义标签
  2. 保证插件正确声明 inline/void否则 Slate 无法识别。
  3. 利用 Snabbdom 的 attrs 写回 把数据属性持久化到 DOM。说起来,

这样既保持了 UI 一致性。又能满足业务对锚定与安全性的双关键求。


标签: 自定义

SEO优化服务概述

作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。

百度官方合作伙伴 白帽SEO技术 数据驱动优化 效果长期稳定

SEO优化核心服务

网站技术SEO

  • 网站结构优化 - 提升网站爬虫可访问性
  • 页面速度优化 - 缩短加载时间,提高用户体验
  • 移动端适配 - 确保移动设备友好性
  • HTTPS安全协议 - 提升网站安全性与信任度
  • 结构化数据标记 - 增强搜索结果显示效果

内容优化服务

  • 关键词研究与布局 - 精准定位目标关键词
  • 高质量内容创作 - 原创、专业、有价值的内容
  • Meta标签优化 - 提升点击率和相关性
  • 内容更新策略 - 保持网站内容新鲜度
  • 多媒体内容优化 - 图片、视频SEO优化

外链建设策略

  • 高质量外链获取 - 权威网站链接建设
  • 品牌提及监控 - 追踪品牌在线曝光
  • 行业目录提交 - 提升网站基础权威
  • 社交媒体整合 - 增强内容传播力
  • 链接质量分析 - 避免低质量链接风险

SEO服务方案对比

服务项目 基础套餐 标准套餐 高级定制
关键词优化数量 10-20个核心词 30-50个核心词+长尾词 80-150个全方位覆盖
内容优化 基础页面优化 全站内容优化+每月5篇原创 个性化内容策略+每月15篇原创
技术SEO 基本技术检查 全面技术优化+移动适配 深度技术重构+性能优化
外链建设 每月5-10条 每月20-30条高质量外链 每月50+条多渠道外链
数据报告 月度基础报告 双周详细报告+分析 每周深度报告+策略调整
效果保障 3-6个月见效 2-4个月见效 1-3个月快速见效

SEO优化实施流程

我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:

1

网站诊断分析

全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。

2

关键词策略制定

基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。

3

技术优化实施

解决网站技术问题,优化网站结构,提升页面速度和移动端体验。

4

内容优化建设

创作高质量原创内容,优化现有页面,建立内容更新机制。

5

外链建设推广

获取高质量外部链接,建立品牌在线影响力,提升网站权威度。

6

数据监控调整

持续监控排名、流量和转化数据,根据效果调整优化策略。

SEO优化常见问题

SEO优化一般需要多长时间才能看到效果?
SEO是一个渐进的过程,通常需要3-6个月才能看到明显效果。具体时间取决于网站现状、竞争程度和优化强度。我们的标准套餐一般在2-4个月内开始显现效果,高级定制方案可能在1-3个月内就能看到初步成果。
你们使用白帽SEO技术还是黑帽技术?
我们始终坚持使用白帽SEO技术,遵循搜索引擎的官方指南。我们的优化策略注重长期效果和可持续性,绝不使用任何可能导致网站被惩罚的违规手段。作为百度官方合作伙伴,我们承诺提供安全、合规的SEO服务。
SEO优化后效果能持续多久?
通过我们的白帽SEO策略获得的排名和流量具有长期稳定性。一旦网站达到理想排名,只需适当的维护和更新,效果可以持续数年。我们提供优化后维护服务,确保您的网站长期保持竞争优势。
你们提供SEO优化效果保障吗?
我们提供基于数据的SEO效果承诺。根据服务套餐不同,我们承诺在约定时间内将核心关键词优化到指定排名位置,或实现约定的自然流量增长目标。所有承诺都会在服务合同中明确约定,并提供详细的KPI衡量标准。

SEO优化效果数据

基于我们服务的客户数据统计,平均优化效果如下:

+85%
自然搜索流量提升
+120%
关键词排名数量
+60%
网站转化率提升
3-6月
平均见效周期

行业案例 - 制造业

  • 优化前:日均自然流量120,核心词无排名
  • 优化6个月后:日均自然流量950,15个核心词首页排名
  • 效果提升:流量增长692%,询盘量增加320%

行业案例 - 电商

  • 优化前:月均自然订单50单,转化率1.2%
  • 优化4个月后:月均自然订单210单,转化率2.8%
  • 效果提升:订单增长320%,转化率提升133%

行业案例 - 教育

  • 优化前:月均咨询量35个,主要依赖付费广告
  • 优化5个月后:月均咨询量180个,自然流量占比65%
  • 效果提升:咨询量增长414%,营销成本降低57%

为什么选择我们的SEO服务

专业团队

  • 10年以上SEO经验专家带队
  • 百度、Google认证工程师
  • 内容创作、技术开发、数据分析多领域团队
  • 持续培训保持技术领先

数据驱动

  • 自主研发SEO分析工具
  • 实时排名监控系统
  • 竞争对手深度分析
  • 效果可视化报告

透明合作

  • 清晰的服务内容和价格
  • 定期进展汇报和沟通
  • 效果数据实时可查
  • 灵活的合同条款

我们的SEO服务理念

我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。

提交需求或反馈

Demand feedback