javascript - 如何使用 html 文档中的 javascript 动态寻址单词/字符串,然后对其进行标记?

标签 javascript html dom dom-traversal

我有一个 HTML 文档:

<html>
  <body>
    <p>
      A funny joke:
      <ul>
        <li>do you know why six is afraid of seven?
        <li>because seven ate nine.
      </ul>
      Oh, so funny!
    </p>
  </body>
</html>

现在我想识别第一次出现的“七”并用

标记它
<span id="link1" class="link">

如何实现这一点?

您是否必须解析 DOM 树,或者是否可以获取正文部分中的整个代码,然后搜索该单词?

在这两种情况下,当我在某处找到这个词后,如何识别它并将其 DOM-parent 更改为 span(我猜这就是必须要做的),然后添加提到的属性?

这并不是我所期望的代码,而是什么方法或概念可以完成这项工作。

我对框架解决方案不太感兴趣,而是对纯 JavaScript 方式感兴趣。

最佳答案

您需要找到一个类型为 TEXT_NODE (3) 并包含您期望的单词的 DOM 节点。当您需要将该节点拆分为三个时。

第一个是 TEXT_NODE,其中包含您搜索的单词之前的文本,第二个是包含您搜索的单词的 SPAN 节点,第三个是另一个包含原始节点尾部的 TEXT_NODE(全部在搜索单词之后)。

这是源代码...

<html>
   <head>
      <style type="text/css">
         .link {
            color: red;
         }
      </style>
   </head>
  <body>
    <p>
      A funny joke:
      <ul>
        <li>do you know why six is afraid of seven?
        <li>because seven ate nine.
      </ul>
      Oh, so funny!
    </p>
    <script type="text/javascript">
       function search(where, what) {
         var children = where.childNodes;
         for(var i = 0, l = children.length; i < l; i++) {
            var child = children[i], pos;
            if(child.nodeType == 3 && (pos = child.nodeValue.indexOf(what)) != -1) { // a TEXT_NODE
               var value = child.nodeValue;
               var parent = child.parentNode;
               var start = value.substring(0, pos);
               var end = value.substring(pos + what.length);
               var span = document.createElement('span');

               child.nodeValue = start;
               span.className = 'link';
               span.id = 'link1';
               span.innerHTML = what;
               parent.appendChild(span);
               parent.appendChild(document.createTextNode(end));
               return true;
            } else
               if(search(child, what))
                  break;
         }
         return false;
       }
       search(document.getElementsByTagName('body')[0], 'seven');
    </script>
  </body>
</html>

关于javascript - 如何使用 html 文档中的 javascript 动态寻址单词/字符串,然后对其进行标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5405942/

相关文章:

javascript - 按条件过滤,带断路取n

javascript - 为什么我的游戏在 Firefox 中那么慢?

javascript - 如何使用原型(prototype)js附加一堆选项来选择HTML中的标签

javascript - 如何垂直对齐表格单元格中的第一行文本?

javascript - SAPUI5 设置JSON模型

javascript - Vanilla JS 事件委托(delegate) - 处理目标元素的子元素

javascript - 如何使用 Typescript/Javascript/Angular 4 过滤 JSON 数据?

php - 如何按用户检索订购的产品并显示它们?使用 SESSION PHP

javascript - 循环节点列表中的所有元素时变量错误

android - 解析 blockquote 中的 p 标签