用HTML span内容替换Text Node

问题描述 投票:-3回答:2

我应该写一个可以改变网页中单词颜色的扩展名,这段代码可以替换单词但不能改变它们的背景颜色

见下面的代码:content.js

walk(document.body);

function walk(node)  
{

    var child, next;

    switch ( node.nodeType )  
    {
        case 1: 
        case 9:  
        case 11: 
            child = node.firstChild;
            while ( child ) 
            {
                next = child.nextSibling; 
                walk(child);
                child = next;
            }
            break;

        case 3: 
            handleText(node);
            break;
    }
}

function handleText(textNode) 
{
    var v = textNode.nodeValue;

    v = v.replace(/Apple/gi, '<span class="red">Pineapple</span>');

    textNode.nodeValue = v;
}

如何将<span class="red">应用于菠萝?

javascript jquery html regex google-chrome-extension
2个回答
0
投票

如果将HTML放入nodeValue,它将被转义。尝试:

textNode.parentElement.innerHTML = 'This <strong>accepts</strong> HTML';

2
投票

因为您正在访问TextNode而不是HTML节点,所替换的文本将是文本而不会被解析为html

所以只需要访问你的元素作为Html节点(node.nodeType == 1Node.ELEMENT_NODE(参见doc),然后得到它的innerHTML并用新的innerHTML替换它

见下面的片段:

walk(document.body);

function walk(node) {

  var child, next;
  switch (node.nodeType) {

    case 1:
      handleText(node);
      break;
    case 9:
    case 11:
      child = node.firstChild;
      while (child) {
        next = child.nextSibling;
        walk(child);
        child = next;
      }
      break;

    case 3:
      break;
  }
}

function handleText(node) {
  var v = node.innerHTML;
  v = v.replace(/Apple/gi, '<span class="red">Pineapple</span>');
  node.innerHTML = v;
}
.red {
  color: red;
  font-weight: bold;
}
<div>
  Apple dsqd sqd qsd Apple sqd sqd Apple
  <p>Apple is an apple and it's an apple </p>
  <p><span>Apple also is an PeanApple</span></p>
  <div>
    what you think about
    <p>
      Apple now !
    </p>
  </div>
</div>

还有Fiddle

© www.soinside.com 2019 - 2024. All rights reserved.