如何将所有text_node节点值的一部分包装在html元素中?

2024-04-18

我正在迭代 html 文档中的所有文本节点,以便用特定的范围包围一些单词。

改变nodeValue不允许我插入 html。这span被转义以纯文本显示,我不希望这样。

这是我到目前为止所拥有的:

var elements = document.getElementsByTagName('*');

for (var i = 0; i < elements.length; i++) {
  var element = elements[i];

  for (var j = 0; j < element.childNodes.length; j++) {
    var node = element.childNodes[j];

    if (node.nodeType === Node.TEXT_NODE) {
      node.nodeValue = node.nodeValue.replace(/Questions/, "<span>Questions</span>");
    }
  }
}
<p>Questions1</p>
<p>Questions 2</p>
<p>Questions 3</p>
<p>Questions 4</p>

我认为你需要递归所有 DOM 和每个匹配......看看这里:

function replacer(node, parent) { 
  var r = /Questions/g;
  var result = r.exec(node.nodeValue);
  if(!result) { return; }
  
  var newNode = this.createElement('span');
  
  newNode.innerHTML = node
    .nodeValue
    .replace(r, '<span class="replaced">$&</span>')
  ;
  
  parent.replaceChild(newNode, node);
}


document.addEventListener('DOMContentLoaded', () => {
  function textNodesIterator(e, cb) {
    if (e.childNodes.length) {
      return Array
        .prototype
        .forEach
        .call(e.childNodes, i => textNodesIterator(i, cb))
      ;
    } 

    if (e.nodeType == Node.TEXT_NODE && e.nodeValue) {
      cb.call(document, e, e.parentNode);
    }
  }

  document
    .getElementById('highlight')
    .onclick = () => textNodesIterator(
    document.body, replacer
  );
});
.replaced {background: yellow; }
.replaced .replaced {background: lightseagreen; }
.replaced .replaced .replaced {background: lightcoral; }
<button id="highlight">Highlight</button>
<hr>
<p>Questions1</p>
<p>Questions 2</p>
<p>Questions 3</p>
<p>Questions 4</p>
<p>Questions 5 Questions 6</p>
<div>
  <h1>Nesting</h1>
  Questions <strong>Questions 4</strong>
  <div> Questions <strong>Questions 4</strong></div>
  
  
  <div> 
    Questions <strong>Questions 4</strong>
    
  <div> Questions <strong>Questions 4</strong></div>
  </div>
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将所有text_node节点值的一部分包装在html元素中? 的相关文章

  • 当 img.crossOrigin="Anonymous" 时,Chrome MJPEG CORS“响应无效”

    Image from origin http 192 168 1 67 5555 has been blocked from loading by Cross Origin Resource Sharing policy Invalid r
  • 如何使用 RSpec 测试 javascript 重定向?

    我正在使用 xhr post 与控制器交互 并且我期待重定向 在 js erb 中 我有 window location href address 手动测试 浏览器会正确重定向 我如何使用 RSpec 测试它 response should
  • 如何在 Ionic 2 中动态创建具有特定类的模式?

    嗨 我已经被一个问题困扰好几天了 到目前为止还没有研究证明足够 我正在尝试在 Ionic 2 中创建一个具有特定类 或 id 的简单模式 我需要这样简单的东西
  • 检测 JavaScript 版本

    如何检测浏览器支持的 JavaScript 版本 如果有 我想检查 ECMAScript 3 ECMAScript 5 和 ECMAScript 6 注意 我想避免已弃用的language tag 这里有一个很好的参考给你 http www
  • Android键盘点击搜索输入时出现和消失

    我在用谷歌地图 Js API当我搜索一个地方时 我的输入搜索栏工作正常 当我通过 iPhone 设备使用它时 它也工作得很好 但是当我通过Android 设备然后键盘立即出现和消失 我已经找到了一些关于当我按下搜索栏时 android 键盘
  • 如何验证单选按钮?

    我的 Rails 应用程序中有一个单选按钮 我想编写一个 java 脚本代码 在未选择任何选项时验证这一点 在你的 votes 类中做类似的事情 class Myvotes lt ActiveRecord Base validates vo
  • HTML 选择框,从 servlet 中选择数据

    再会 我在 html 中的选择框上遇到问题 我位于简单 CRUD 项目的编辑部分 在用户可以编辑之前 将首先显示所选数据 然后我通过 servlet 在数据库中检索它 现在我希望我检索的数据成为我的选择框中选定的数据 默认 product
  • 任何 JavaScript 代码都是有效的 TypeScript 代码吗?

    目前我已经开始学习TypeScript 从我研究过的文档来看TypeScript 我看到一些纯的样品JavaScript代码可以编译为TypeScript code 我的问题是 TypeScript 语言的设计方式是否使任何 JavaScr
  • React-Router v5 History.push 不触发组件

    很抱歉朋友们又问这个问题了 我找到了解决这个问题的几个方法 但他们让我很困惑 我只是想问一个优雅的方法来做到这一点 正如你通过标题所理解的 我有一个关于反应路由的问题 让我解释 我有一个按钮 其名称是Login 单击按钮后 我执行了一些逻辑
  • 节省页面加载时间的提示[重复]

    这个问题在这里已经有答案了 我的问题 削减那些不必要的 kb 并使页面加载速度更快的最佳方法是什么 全部是什么优化实践 编码实践 在js php中 如果执行可以使您的页面更轻 为什么我问这个 我读了这篇关于 jquery js 与 jque
  • setTimeout() 的问题

    这是我的代码 我想要它做的是写 0 等待一秒 写 1 等待一秒 写 2 等待一秒 等等 而是写 5 5 5 5 5 for i 0 i lt 5 i setTimeout document write i 1000 http jsfiddl
  • 在javascript中通过window.location传递数据

    我试图通过 window location 传递数据 数据在 del id img album 中可用 我想通过 window location 发送多个值 window location save php type deldownload
  • 如何在 Vue.js 2 中使用事件总线通过自定义事件传递数据

    我在用着Vue js 2 5 x 在我的玩具项目中 我实现了一个事件总线 类似于所示的here https alligator io vuejs global event bus 事件总线在 Vue 原型中全局注册为 eventBus 然后
  • javascript 多维类型数组 (Int8Array) 示例

    我尝试使用类型数组而不是数组来减少内存 function createarrayInt8 numrows numcols number var arr new Int8Array numrows for var i 0 i lt numro
  • 用于验证网络路径的正则表达式 PHP、jQuery、JavaScript、Ruby

    尝试找出用于验证网络路径的正则表达式 即 comp xyz or comp or comp x y z storage或者所有部分都更长的东西 但希望能够传达其要点 我目前拥有的是一个简单的输入字段 用户可以通过它传递信息 事情是我不希望他
  • :目标选择器不适用于选项标签

    我试图在这里帮助一位 StackOverflow 成员 我发现 CSS target选择器不适用于选项标签 我创建了一个示例来说明使用w3schools 教程 http www w3schools com cssref tryit asp
  • c3js数据标签的位置

    有没有可能的方法来更改数据上方标签的位置c3条形图 在官方文档中 很好地解释了如何通过操作 y 和 x 整数来更改 x 和 y 测量轴上标签的位置 但我没有找到任何数据标签 我试图用简单的方式指出它d3其上c3是基于但是console lo
  • javascript捕获文本区域中的粘贴事件

    我目前有一个文本区域 我需要控制已粘贴的文本 本质上 我需要能够将用户想要粘贴到文本区域中的任何内容并将其放入变量中 然后我将计算出他们粘贴文本的位置和字符串的大小 以将其从文本区域中删除 然后最后用我自己的方式处理变量中的文本 我的问题
  • 在 Javascript 中使用 fetch API 接收和处理 JSON

    在我的项目中 当条件不足时 我的 Django 应用程序会发送带有消息的 JSON 响应 我使用这个 JsonResponse 指令 Code data is taken email email return JsonResponse da
  • 对于调用另一个异步函数的异步函数,玩笑测试失败

    我正在尝试测试一个使用另一个异步函数返回的数据的异步函数 这是解释我的问题的代码 StudentInfo js export async function getData studentData imported from another

随机推荐

  • 如何在 vue.config.js 中设置用于生产的 API 路径?

    我使用 vue cli3 进行设置 我已经在中设置了 devServer apivue config js file devServer proxy api target http localhost 1888 apps test main
  • Ravendb:如何删除给定类型的所有文档

    更具体地说 在 Raven DB 中 我想创建一个具有如下签名的通用方法 public void Clear
  • 如何使用语义和干净的 HTML、CSS 来制作不均匀的文本换行(不是方形或圆形)?

    如何使用语义和干净的 HTML CSS 进行这样的文本换行 与所有浏览器兼容 添加不同的类 p 如果没有其他解决方案 这是我想到的唯一解决方案 但这样每次客户都无法更改类 这是缺点 您可以将图像设置为背景 p p 然后将透明容器以您不希望文
  • SAS 全球日期比较

    我正在尝试进行日期比较 但没有得到正确的结果 有谁知道发生了什么事吗 macro ttt let check start 28APR2014 if check start d lt 25may2014 d then let true 1 e
  • 如何使 multer 正确解析使用表单数据发送的客户端请求?

    我想将数据从客户端传输到双方都使用的服务器计算机Node js 在客户端我正在使用库axios and form data 在我正在使用的服务器上express and multer 我正在使用的客户端代码如下 const FormData
  • MarkerView 走出图表以获取图表上的最后一个点

    我正在使用 MarkerView 类在图表中显示标记视图 我创建的标记视图布局包含两个文本视图 一个在另一个下面 我面临的问题是图表上最后一点的标记视图一半在图表内 一半在图表外 下面两张图清楚地说明了问题 第一张图片显示了图表中心点的标记
  • 通过在 MATLAB 中填充当前值来扩展数组

    我有一个相当简单的问题 我只是想知道在 MATLAB 中是否有一种简单的方法可以做到这一点 即一个函数来完成此任务 而不是自己编写循环或其他东西 假设我有一个时间序列 其中 Time 是1 1 1000和数据是2 1 1 1000 我想通过
  • 如何在不使用依赖注入的情况下模拟另一个包中的函数?

    有点像 golang 初学者 但我以前曾使用过测试框架 如何在不注入依赖项的情况下模拟和伪造依赖方法返回的内容 我不想使用依赖项注入的原因是因为正在使用许多外部包方法 并且在构造函数中注入所有方法很麻烦 我已经在线 stackoverflo
  • phpmyadmin 中令人讨厌的警告[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 每次我登录 phpMyAdmin 时 我都会在红色框中收到一条恼人的警告消息 我已经卸载了 xampp 然后再次安装了几次 我删除
  • Google_maps_flutter 在 iOS 中不显示缩放和路线按钮

    在 IOS 中使用 google map flutter api 时 不会显示缩放和路线按钮 当点击地图上的任何位置时 这些按钮会在 Android 中显示 但是 IOS 中不存在相同的行为 我希望这些按钮在 IOS 中也可用 IOS 中仅
  • 使用MSBuild与VS2017构建SSDT项目失败

    我正在尝试在我们的 Windows Server 2016 服务器上设置 sqlproj SSDT 项目的持续集成 为此 我在服务器上安装了 VS2017 和 SSDT 工具以获得所需的工具 我还安装了 MS build tools 201
  • 嵌套形式和 habtm

    我正在尝试保存到 habtm 关系中的联接表 但遇到问题 在我看来 我传递的组 ID 为 User model user rb class User lt ActiveRecord Base has and belongs to many
  • 配置HttpClientFactory时证书错误

    我需要添加证书HttpClientFactory 旧的实现与HttpClient看看这个 var cookieContainer new CookieContainer var handler new HttpClientHandler C
  • 如何将一列中的文本拆分为多行

    我正在处理一个大型 csv 文件 倒数第二列有一个文本字符串 我想用特定分隔符分割它 我想知道是否有一种简单的方法可以使用 pandas 或 python 来做到这一点 CustNum CustomerName ItemQty Item S
  • 使用 ASP.NET 4.5 应用程序中需要 WS-Security 的 Web 服务

    我需要使用一个 Web 服务 该服务需要基于 ASP NET 4 5 应用程序的 X 509 证书的 WS Security 到目前为止 我已经创建了 Web 参考 但我不知道如何实现 WS Security 我获得证书没有问题 但我不知道
  • svn 可以提供哪些报告?

    我们正在迁移到 SVN 对我们来说不幸的是 我们会定期接受审核 审核员需要以下信息 文件更改历史记录SVN访问历史添加了新文件文件的变化 是否有一个工具可以为我们生成这些报告 或其中一些报告 StatSVN是一个轻量级的颠覆报告生成器 ht
  • 如何使用jquery获取动态创建的没有Id的子元素的高度

    我有一个 div 它总是动态加载两个图像 并且可能在中间加载一个 div 图像或 div 都没有与之关联的 id 而且我不能让它们有 id 用萤火虫检查它们 它们只是显示为 img and div 我需要获取这个子 div 存在时的高度 我
  • 打印用户输入的两个最高值

    我有一个作业 我必须编写一段代码 让用户决定要写入的 int 值的数量 然后决定这些值应该是什么 用户必须至少有 2 个输入 然后程序将比较输入的值 然后打印出两个最高值 到目前为止 我设法打印出最高的值 但我不确定我的做法有什么问题 因为
  • Chrome 更新破坏了我的滚动子菜单

    在 Windows 和 Osx 中将 Chrome 更新到版本 56 它破坏了我的滚动子菜单 如果我用鼠标滚轮滚动 滚动操作就会起作用 但是如果我将鼠标指针悬停在滚动条上 子菜单就会关闭 我使用以下 css 来滚动子菜单 ul scroll
  • 如何将所有text_node节点值的一部分包装在html元素中?

    我正在迭代 html 文档中的所有文本节点 以便用特定的范围包围一些单词 改变nodeValue不允许我插入 html 这span被转义以纯文本显示 我不希望这样 这是我到目前为止所拥有的 var elements document get