我的一个朋友最近和我分享了这个:
$("*").append($("*")); // watch your browser eat itself
这个 jQuery 到底想做什么?它会导致无限循环,还是只是通过迭代地将每个元素附加到每个其他元素来破坏 DOM?我知道将一个元素附加到另一个元素基本上将它从其当前父级移到那里。但是当它试图将一个元素附加到自身时会发生什么?它只是简单地出错并死掉,还是跳过这一步继续前进?
我的一个朋友最近和我分享了这个:
$("*").append($("*")); // watch your browser eat itself
这个 jQuery 到底想做什么?它会导致无限循环,还是只是通过迭代地将每个元素附加到每个其他元素来破坏 DOM?我知道将一个元素附加到另一个元素基本上将它从其当前父级移到那里。但是当它试图将一个元素附加到自身时会发生什么?它只是简单地出错并死掉,还是跳过这一步继续前进?
在 Chrome 和 FFX 中(没有在 IE 中测试,因为我很害怕)我得到一个层次结构请求错误,当您尝试将节点附加到自身或附加到空节点或一堆其他类似原因时会发生这种错误。
这意味着从逻辑上讲,它实际上确实会遍历 DOM 树并首先尝试附加其他节点。选择器选择两次相同的节点并尝试将其附加到自身,这会导致错误。
从它的外观来看,它会出错(并且什么都不做),因为您正在尝试绝对附加所有内容,html / head / script / body
标签。我假设这是因为在特定标签内添加其中一些标签会触发错误。<html/head/etc>
(即:在标签内添加所有这些标签<script>
。)
*
是所有标签的 CSS 选择器。所以基本上“将所有标签附加到所有标签”。