- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
正在重置 outerHTML
document.body
的属性(property)有一个奇怪的副作用:它增加了额外的空 <head></head>
进入 DOM,就在 body
之前:
head { display: inline; counter-increment: h; border: 1px solid; }
head:last-of-type::after { content: 'Head elements count: ' counter(h); }
[onclick]::after { content: attr(onclick); }
<button onclick="document.body.outerHTML=document.body.outerHTML"></button>
所有的浏览器在这方面似乎都是一致的。我有 been told它被指定为这种方式,但无法挖掘出关于此的权威标准立场,甚至在讨论文件中也没有提及。您知道这方面的一些背景吗,或者是否有一些技术原因必须这样?有什么想法吗?
最佳答案
有趣的问题。不幸的是,解释隐藏在 HTML fragment parsing algorithm 的细节中。这是从 outerHTML 的定义中引用的在 DOM 解析规范中。
您需要非常仔细地跟踪解析器状态以了解原因,但本质上它是这样工作的。使用 outerHTML,解析器被初始化,就好像它刚刚解析了给定节点父节点的开始标记一样。对于 document.body,这是 html
元素。
在 HTML 解析算法中,当一个 html
开始标记被解析时,解析器接下来期望的是一个 head
元素。但是因为在 HTML 中,head 元素的开始和结束标记是可选的,如果它没有看到接下来的 head 开始标记,它会推断出一个。所以对于 document.body.outerHTML,解析器接下来看到的是 body
开始标记,因此首先创建一个空的 head 元素。
最后,一旦片段被解析,整个部分,包括推断的 head 元素被添加到 DOM。
关于javascript - 设置 document.body.outerHTML 会创建空头。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52888347/
在 HTML5/JavaScript 中,如果我以编程方式创建一个命名空间 dom 节点,如下所示: svgElt = document.createElementNS("http://www.w3.
HTML: func2() JS: function func1() { console.log(arguments.callee.caller.arguments[0]
我正在尝试将 HTML 代码作为具有属性更新的字符串获取。 我有一个 select 标签,我使用 JavaScript 更新了它的选项。 默认情况下,第一个选项是使用HTML属性selected="s
我的页面的访问者可以将主体的背景设置为颜色或图像。这些更改最终内嵌为如下内容: 现在我想获取上面跟在 style= 之后的字符串,并使用那里的参数来构建一个合适的样式字符串: body
我在使用 IE 浏览器时遇到的outerHTML 问题 如果我说: txt="Update Complete!"; msg = sub.appendChild(d.createElement("p")
我正在尝试为 jQuery 元素获取一致的跨浏览器 outerHtml,尤其是 $("html").outerHtml()。例如,如果页面源是这样的: 我希望能够使用 $("html").outer
我在 html 中有 3 张图片。 我用 querySelectorAll 选择图像,把它们变成一个数组,然后: 第一步 我将它们封装在 中标签,添加 .img-container类,使用 oute
考虑以下片段: var cites = document.getElementsByTagName('cite'); console.log(cites.length); cites[0].outer
这把 fiddle https://jsfiddle.net/xa9m49zy/演示了您可以在渲染时获取 DOM 中文本区域的 outerHTML(带有文本区域值),但是当文本区域动态添加到 DOM
我想获取一个 div#content 的 outerHTML,标签被 .text() 转义到一个变量中,像这样: var divContent = $('div#content')[0].text()
我创建了一个通用元素 var element = document.createElement(null); document.body.appendChild(element); 之后,使用 out
我有简单的代码: document.getElementById("number").addEventListener('click', test); var i = 1; function test
我正在使用 jQuery 获取外部 html:$('.page')[0].outerHTML这有效,但我有必须像这样关闭的 img 标签:但 outerHTML 删除了 / .如何解决这个问题? UP
我有以下 javascript: // create a new article tag var elem = document.createElement('article'); // append
当你想得到 HTML对于整个 DOM 元素(包括包装器),您可以执行以下操作(如 here 所述): $('#myElementId')[0].outerHTML 但是您不能做的是在 $(this)
我通过将其内容替换为 outerHTML 来替换 DOM 元素.这个技巧有效,但我需要立即访问新创建的 DOM 元素。 不幸的是元素的创建和生成 var code 的内容不在我的控制之下。 var c
我的代码从 Ajax 调用中获取 JSON,其中包含 XML,并通过它读取一些信息。 虽然 XML 的解析在 Chrome 中运行良好,但在 IE 中却不行,因为在 IE 中 outerHTML 返回
在开发过程中,jQuery.html() 是获取当前节点下的html代码,并不包含当前节点本身的代码,然后我们有时候确需要,找遍jQuery api文档也没有任何方法可以拿到。 看到有的人通过pa
我在页面上有这个 HTML 模板: Bid #1 我正在尝试删除 _[[template]] 文本,并将
所以如果我有一个 容器……我用你知道的: document.querySelector('.iii').outerHTML='';它删除了 span 并实质上从 DOM 中删除了该 span 元素,并
我是一名优秀的程序员,十分优秀!