这会抛出与DOM相关的错误(Chrome中的“未捕获错误:NOT_FOUND_ERR:DOM异常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上的每个版本都会出现相同的错误,所以至少它不是回归。)
答案 0 :(得分:4)
$(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对象(具有数组必须具有的属性)合并到selector或[]的结果中并返回它。
问题解决了:https://gist.github.com/947169 如果你想看看如何,请查看&lt; changes&gt;和&lt; / changes&gt;
我会发布问题或执行拉取请求。 在他们更改之前,您可以添加:https://gist.github.com/raw/947169/6a9711ead197e17a636d7c43b72dc8efd7a6baec/jQuery.js
票证:http://bugs.jquery.com/ticket/9011 拉取请求:https://github.com/jquery/jquery/pull/359
答案 1 :(得分:1)
根据其他答案表明jQuery(至少1.6)不支持jQuery对象数组,我的解决方案是提取dom对象并将其插入到数组中。
var li1 = $("<li />").get(0);
var li2 = $("<li />").get(0);
var lis = [li1, li2];
$("<ul />").append(lis);
答案 2 :(得分:-1)
var li$ = $("<li />");
var lis$ = $([li$]);
你想用这个来完成什么?第一个将拉取页面上的所有<li/>
标记。很自然地,你的第二个例子可行。
你的第一个例子是它拉取所有<li/>
标签,用jQuery对象包装它们然后将该jQuery对象放在一个数组中,该数组是另一个jQuery对象的参数。
我不认为jQuery开发人员曾经想过那个用例。