JQuery刚刚创建的空div没有文档片段作为父级

标签 jquery documentfragment

当使用 jQuery 创建新的 html 节点时

$('<some-node>some html code</some-node>');

在您附加它之前,它不会成为 DOM 的一部分。但这并不意味着该节点没有父节点。

如果节点创建时非空,例如:

var myNewNode = $('<div>Hello</div>');

您可以检查父级:

myNewNode[0].parentNode; // Who is the parent?

看看你得到

DocumentFragment

结果。 DocumentFragment 是一些类似于 document 的对象,但不是 DOM 树的一部分。

奇怪的事情来了。当您创建一个空节点时,例如

var myNewEmptyNode = $('<div></div>');

并尝试检查其内容

myNewEmptyNode[0].parentNode; // Who is now the parent?

令人惊讶的是你得到了

null

我无法理解这种行为,并且在 jQuery 文档中没有找到任何相关内容。我在尝试调试为什么 javascriptMVC mxui modal 在空 div 上失败时发现了它。

我已经在 Chromium 和 Opera 中测试了此行为,因此它似乎不是与浏览器相关的问题。

有人对此有解释吗?

最佳答案

这是因为 jQuery 使用 document.createElement对于“快速”HTML 字符串,但是 jQuery.buildFragment对于所有其他(更“复杂”)HTML 字符串。 <div></div>被认为很快,而 <div>a</div>不是。

我设置了一个 fiddle ,以便您可以检查:http://jsfiddle.net/PzBSY/2/ .

“快”是 defined与正则表达式:

var rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/;

传递空 div 字符串,但不传递非空 div 字符串。请注意 if / else block在检查这两个分支之后。

所以这基本上是因为 jQuery 显式地使用非空 div 构建文档片段,而它不使用空 div (它只是使用 document.createElement("div") 来代替)。

关于JQuery刚刚创建的空div没有文档片段作为父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10372271/

相关文章:

jquery - 防止 JQuery Mobile 可折叠集 header 被截断

javascript - 附加一个 DocumentFragment 会导致多少回流?

javascript - 文档片段中自定义元素的初始化

javascript - 将节点与中断标签一起附加到文档片段

javascript - 从 Shadow DOM 中访问元素

javascript - 使用 j 查询在一个下拉列表中选择选项时如何填充 json?

javascript - 如何在将图像保存到数据库之前验证图像大小和尺寸

dom - jsoup 相当于 DOM 范围操作,如 extractContents() 等

javascript - jQuery 字符串包含操作?

javascript - 垃圾邮件可以看到/使用 javascript 吗?