javascript - 有没有办法通过重新呈现页面上的特定元素来强制浏览器修复无效标记?

标签 javascript html webkit gecko

我有这样一种情况,即通过特定组件动态更改元素。 该组件更改了这些元素的 innerHTML 但实际上并不重新呈现元素,而只是重新呈现其内容。 这会导致最终 DOM 与最初出现在页面上时不同的情况 - 这对我来说是个问题。

这种混淆的一个例子是: 如果我们采用以下标记:

<h1 id="foo">Hi there stranger!</h1>

然后我添加以下 JS 代码:

document.getElementById('foo').innerHTML = "Hi <h2>there</h2> stranger!";

我们将得到以下标记:

<h1 id="foo">Hi <h2>there</h2> stranger!</h1>

它会像上面看到的一样呈现(H2 在 H1 中),但是如果这个标记首先出现在页面上,它将呈现为:

<h1>Hi</h1> <h2>there</h2> <h1>stranger!</h1>

这显然会产生不同的文档。

所以,我的问题是: 如何强制浏览器重新呈现此标记? 我希望能够引用上面的 H1 并告诉它以相同的方式它首先呈现的方式重新呈现。 我如何在所有主要引擎(Gecko、Webkit、IE)中执行此操作?

最佳答案

我将此称为“尝试修复无效标记”,而不是“重新渲染”。无论如何,您应该将 html 分配给层次结构中比相关节点更高的节点。不得已,重装全<body>应该工作:

 document.body.innerHTML = document.body.innerHTML

另一种选择是使用 outerHTML ,即:

document.getElementById('foo').outerHTML = "<h1>Hi <h2>there</h2> stranger!</h1>";

至少在 FF 中,这似乎按预期工作。

关于javascript - 有没有办法通过重新呈现页面上的特定元素来强制浏览器修复无效标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10417726/

相关文章:

javascript - 如何通过在Javascript末尾附加一个值来创建动态对象?

javascript - 如何在不影响所有键的情况下在 jquery 中使用 keydown 事件?

html - 我不确定如何将两个 div 移动到侧边栏,或者如何制作侧边栏 - HTML 和 CSS

html - 为什么表格 tr 悬停效果不起作用?

javascript - 单击后可以加载窗口吗?

ios - WKHTTPCookieStorage 的 setCookie 在关闭和打开 Web View 后不返回

javascript - 在 webkit 浏览器中访问 'background-image' css 属性

javascript - 单击“相同”按钮可反转 Javascript 效果

JavaScript addChild() 输入到表单

javascript - 在 JavaScript 中检测 WebKit 设备的物理屏幕尺寸