javascript - 与innerText类似的行为,但保留 <img> 标签

标签 javascript html dom

我想获取元素的内部文本,但理想情况下保持它们包含的任何图像标签完好无损。 所以如下:

<span>some<img src="first"><b>awesome</b><span>text<img src="second"></span></span>

应该转换为类似的内容:

some<img src="first">awesometext<img src="second">

有什么简单的方法可以实现这一点吗?

最佳答案

也许不是一个简单的方法。当您想要删除除图像和文本节点之外的所有节点时,您将必须循环子节点。这里是一个本地 js 代码示例:

function cleaned(node) {
  if (node.nodeType === node.TEXT_NODE) {
    return node.data;
  } else if (node.tagName === "IMG") {
    return node.outerHTML;
  } else {
    var ret = "";
    if (!node.childNodes) {
      return ret;
    }
    node.childNodes.forEach(function(subnode) {
      ret += cleaned(subnode);
    });
    return ret;
  }
}

var str = cleaned(document.getElementById("src"));

console.info(str);
<div id="src">
  <span>some<img src="first"><b>awesome</b><span>text<img src="second"></span></span>
</div>

关于javascript - 与innerText类似的行为,但保留 <img> 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50136509/

相关文章:

html - 如何使用 Bootstrap 3 对齐表单中的单独行?

javascript - 如何控制页面加载工作流程

javascript - 如何使用 jquery 从 HTML 中排除 thead 、 tfoot 和 input[type=checkbox] ?

javascript - 在 Fabric.js 中,如何修改对象类以便所有子类都具有新的自定义属性?

javascript - 使用jquery向表中添加行

javascript - jquery ajax 表单提交与 twitter bootstrap 模式

javascript - 如何切换 ng 类

javascript - jQuery find() 在 IE 和 FF 中的顺序不同

javascript - 如何同时声明很多document.getElementById变量

javascript - 如何让异步ajax请求真正异步?