0

我正在使用以下命令在 stackTrace 元素中呈现文本

messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));

但是,当它呈现“result.trace.stack”时,它会将内容用双引号括起来,因此我认为这不会呈现变量中包含的 HTML 标记result.trace.stack

有没有办法在字符串中渲染 HTML 标签,以便标签等<b>text</b>实际生效?

更新

好的,我想我知道为什么,它createTextNode在创建节点时使用:

if (typeof child === 'string') {
  el.appendChild(document.createTextNode(child));
} else {
  if (child) {
    el.appendChild(child);
  }
}
4

1 回答 1

1

如何让HTML标签生效?

您可以更改createDom函数不构造文本节点,而是使用innerHTML属性:

if (typeof child === 'string') {
  el.innerHTML = child;
} …

如果您需要纯文本,则需要在调用中显式构造文本节点,例如

this.createDom('div', {className: 'stackTrace'}, document.createTextNode(result.plainString))

所以如果你想createDom向后兼容,你应该让它成为一个额外的标志是否innerHTML应该使用。

如果您无法更改createDom,那么您有两种选择: 将 adocumentFragment与相应的内容一起传递,您需要以复杂的方式构造它,如child; innerHTML或者你没有在结果元素上显式传递任何集合:

var el = this.createDom('div', {className: 'stackTrace'});
el.innerHTML = result.trace.stack;
messagesDiv.appendChild(el);
于 2013-06-11T16:03:31.013 回答