JQuery刚刚创建了空div';不能将文档片段作为父级

JQuery刚刚创建了空div';不能将文档片段作为父级,jquery,documentfragment,Jquery,Documentfragment,使用在jQuery中创建新html节点时 $('<some-node>some html code</some-node>'); 看到你了吗 DocumentFragment 结果呢DocumentFragment是一些类似于document的对象,但不是DOM树的一部分 奇怪的事情来了。创建空节点时,如 var myNewEmptyNode = $('<div></div>'); 令人惊讶的是,你得到了 null 我无法理解这种行为,在j

使用在jQuery中创建新html节点时

$('<some-node>some html code</some-node>');
看到你了吗

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

奇怪的事情来了。创建空节点时,如

var myNewEmptyNode = $('<div></div>');
令人惊讶的是,你得到了

null
我无法理解这种行为,在jQuery文档中找不到任何关于它的信息。我在调试javascriptMVC mxui模式在空div上失败的原因时发现了它

我已经在Chromium和Opera中测试了这种行为,所以它似乎不是一个与浏览器相关的问题


有人对此有解释吗?

这里的
target
可能是任何有效的jQuery选择器

只有
$(“”)
不会为DOM创建任何节点。它只是虚拟地创建它,而不是将它放在文档中。要将其插入DOM,需要使用类似于
append()、appendTo()、insert()等方法

$('target').append($('<div class="latest"></div>'));
$('div.latest').parent();
$('target')。追加($('');
$('div.latest').parent();

在这里,我用class
latest
插入了一个
div
,并在附加它之后使用
parent()
方法检索它的父节点。

这是因为jQuery使用
document.createElement
表示“快速”HTML字符串,而使用
jQuery.buildFragment
表示所有其他(更“复杂”)HTML字符串<代码>
被认为是快速的,而
a
则不是

我设置了一把小提琴,这样你可以检查:

“Quick”与正则表达式一起使用:

var rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/;
var rsingleTag=/^(?:)?$/;
它传递空div字符串,但不传递非空div字符串。注意检查后的两个分支


因此,这基本上是因为jQuery显式地使用非空div构建文档片段,而不使用空div(它只使用
document.createElement(“div”)

该代码中的
parentNode
的目的是什么?!它是javascriptMVC中的
Mxui.Layout.Positionable
中的代码。它的用途是将元素从一个位置移动到另一个位置:
this.element[0].parentNode.removeChild(this.element[0]);document.body.appendChild(this.element[0])
@Samuel Hapak:appendChild应该足够了。一个元素无论如何只能存在于一个地方,因此它将在前一个地方自动删除。虽然这是真的,但你根本没有回答他的问题。@gdoron我知道。但是OP是否像回答一样提出了一个问题来回答呢?也许这个问题没有很好的表述,我会尽量让它更清楚。你能解释一下他们为什么这样做吗?我已经研究过了,但没有发现任何线索。@hbrls根据判断,这是为了性能。
null
$('target').append($('<div class="latest"></div>'));
$('div.latest').parent();
var rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/;