这会引发 DOM 相关错误(Chrome 中的“Uncaught Error: NOT_FOUND_ERR: DOM Exception 8”):
var li$ = $("<li />");
var li2$ = $("<li />");
var lis$ = $([li$, li2$]);
$("<ul />").append(lis$); // doing [li$, li2$] instead of lis$ breaks too
这段代码工作正常:
var li$ = $("<li />");
var li2$ = $("<li />");
$("<ul />").append(li$).append(li2$);
这不是受支持的场景吗?如果是这样,有什么想法为什么不呢?我应该报告 jQuery 中的错误吗?
(顺便说一句,1.5.2,但 JSFiddle 上的每个版本都会给出相同的错误,所以至少它不是回归。)
最佳答案
$(element)
返回一个由 jQuery 创建的对象,该对象具有对该元素的引用。
$(array)
相同,但有多个引用。
在这里,你有点在做:
$($(element))
除了当你传入一个数组时,它显然不会检查它们是否已经是 jQuery 对象。
看起来他们没有想到这个用例。 它们不处理数组:https://github.com/jquery/jquery/blob/master/src/core.js
等等...他们确实:
var b = document.body;
$( [ b.firstChild, b.lastChild ] ).text( );//OK
var b = document.body;
$( [ $( b.firstChild ), $( b.lastChild ) ] ).text( );//FAIL
问题似乎出在 makeArray 第 645 行,因为 init 方法似乎不处理数组,并且如果没有匹配的内容,则会调用 makeArray。 makeArray 调用 merge 将 jQuery 对象(具有数组必须具有的属性)合并到选择器或 [] 的结果中并返回它。
问题已解决:https://gist.github.com/947169
如果您想了解具体方法,请查看
我将发布问题或提出拉取请求。 在他们更改之前,您可以只包含: https://gist.github.com/raw/947169/6a9711ead197e17a636d7c43b72dc8efd7a6baec/jQuery.js
机票:http://bugs.jquery.com/ticket/9011 拉取请求:https://github.com/jquery/jquery/pull/359
关于jQuery .append 不适用于断开连接的 DOM 节点数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5823776/