【问题标题】:Javascript insert text into divJavascript将文本插入div
【发布时间】:2012-11-15 14:52:51
【问题描述】:

这是Removing <span> tag while leaving content intact, with just javascript的后续问题

如果我使用 span 突出显示页面中的文本,它会将内容分解为新节点。然后,当我使用replaceChild 删除突出显示跨度时,节点保持分离。我希望将原始文本合并回单个文本节点,而不是三个文本节点 - 突出显示开始之前的文本、之前突出显示的文本以及突出显示结束后的文本。这可能吗?

【问题讨论】:

  • 请发布您的代码...
  • 你没有说明你是否可以使用 jQuery。如果是这样,请查看 jQuery.unwrap ...api.jquery.com/unwrap

标签: javascript dom highlighting


【解决方案1】:

你可以试试

 containerElement.innerHTML = containerElement.textContent;

不确定是否可以在 9 之前的 IE 上运行,但由于 textContent。

【讨论】:

  • 这似乎可行。但是如果 containerElement 有其他孩子的标签需要保持不变呢?使用这个想法,我尝试循环遍历 while(下一个节点也是 text_node)并附加到一个字符串,然后使用 innerHTML = 字符串,但我无法让它工作。我不想问太多,我只是想弄清楚这几个小时,我的大脑已经累了。
【解决方案2】:

类似于 Jim 的建议,但适应 IE:

containerElement.innerHTML = containerElement.textContent || containerElement.innerText;

或者更长的版本:

var text = containerElement.textContent || containerElement.innerText;

while (containerElement.firstChild) {
    containerElement.removeChild(containerElement.firstChild);
}
containerElement.appendChild(document.createTextNode(text));

我认为第一个更简单。

【讨论】:

  • 选择这个作为答案,因为它适用于 IE,并且循环版本可用于手动停止在某个节点。感谢 RobG 和 Jim 的回答。我将它用于其中只有文本的元素。对于需要在其中包含其他元素的元素(我的一个有一个 pre)的任何人的参考,containerElement.normalize() 将合并相邻的文本节点并删除空的节点,并保持所有其他标签完好无损。跨度>
猜你喜欢
  • 2010-09-20
  • 2011-11-08
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多