Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建一组jquery对象的最简单方法_Jquery_Object_Set - Fatal编程技术网

创建一组jquery对象的最简单方法

创建一组jquery对象的最简单方法,jquery,object,set,Jquery,Object,Set,是的,我当时的做法是 A.add(B).add(C).add(D).show() 而A、B、C、D是jQuery对象。我想知道有没有这么简单的方法? 我尝试了以下所有方法,但没有结果: $(A,B,C,D).show() A.add(B,C,D).show() 欢迎所有建议 补充澄清问题: 这部戏只是为了演示。我只是想知道如何创建一组JQuery对象,比如$'p'创建一组p标记 在我的真实案例中,我使用 $([A,B,C,D]).each(fn) 而不是。秀,我想知道这为什么有效?

是的,我当时的做法是

   A.add(B).add(C).add(D).show()
而A、B、C、D是jQuery对象。我想知道有没有这么简单的方法? 我尝试了以下所有方法,但没有结果:

$(A,B,C,D).show()
A.add(B,C,D).show()
欢迎所有建议

补充澄清问题:

这部戏只是为了演示。我只是想知道如何创建一组JQuery对象,比如$'p'创建一组p标记

在我的真实案例中,我使用

$([A,B,C,D]).each(fn)
而不是。秀,我想知道这为什么有效? 很明显

$([A,B,C,D]).each(fn)
$('p').each(fn)
两者都有效。但是

$([A,B,C,D]).show()  //--doesn't work
$('p').show()        //--works
第二行就行了。有人知道他们之间的区别吗? 我只是觉得他们是一样的,然后在我的问题上有点纠结

$.each([A,B,C,D], function(){ 
    $(this).css('background','red'); 
})
此解决方案不使用选择器,而是使用名为的jQuery方法,该方法获取数组并对其进行迭代。传递的数组是一组jQuery对象$这是指每次迭代的jQuery对象

演示:

有关$如何工作的其他事实: $element是jQueryelement的快捷方式。jQuery方法接受一组不同的参数:

有关每种类型参数的说明,请参见

其中一种类型的参数是elementArray。这方面的说明如下:

elementArray包含一组要包装在jQuery对象中的DOM元素的数组

关键在于,当您使用jQuery选择一个元素时,它会直接返回一个jQuery对象,而不是DOM元素。因此,这不会返回任何元素:

var element1 = $("selector1");
var element2 = $("selector2");
$([element1,element2]) // will not return any elements
要返回DOM元素而不是jQuery对象,必须访问jQuery对象0位置的属性。如下:$element[0]。这就是为什么这会起作用:


假设您有原始DOM元素,而不是jQuery对象,如$'abc'或$'.abc',则无需使用add:

有关详细信息,请参阅该函数的文档

如果您真的想要像$A、B、C、D这样的东西,其中A、B、C、D是jQuery对象,那么唯一真正的方法就是使用您自己的函数

这就是诀窍:

var all = function() {
    var objs = $();
    $.each(arguments, function(i,e) {
        objs = objs.add(e);
    });
    return objs;
};

// ...

all(A,B,C,D).show();

工作示例:

以下是我能想到的最短版本:

A.add([B[0], C[0], D[0]]).show();
这将传入一个元素数组,而不是jQuery对象。仅当B、C和D是单元素数组时有效


要获取由多个jQuery对象合并而成的集合,这些对象在某种程度上只是数组,可以使用$.merge:

$.merge只在一对数组上工作,所以在大量jQuery对象上使用它会变得非常烦人。。。在这种情况下,您可以使用$.get获取原始数组并将它们合并在一起:

var union = $([].concat(A.get(), B.get(), C.get(), ...));
// Assuming A, B, C... are jQuery objects


你试过文档了吗你试过$[A,B,C,D]秀吗?@namuol:我没想到这么简单,非常感谢!你能回答一下你的意见吗?我会接受的?让其他人找到它easily@namuol-不,不行:@nrabinowitz:很好。我想我误解了;我以为A,B,C,D是DOM元素。这不起作用。jQuery接受单个jQuery对象作为参数,但不接受它们的数组。它接受一个DOM元素数组,但不接受jQuery对象数组。@jfriend00:我的回答明确地说,假设A、B、C、D是一个DOM元素数组,而不是jQuery对象数组。但是,这根本不是问题的答案。当A、B、C、D是jQuery对象时,问题表示。作为一种评论,这将更为恰当。这不是对所问问题的回答,我同意。这就是为什么我最初留下了一条评论——见上面我的评论——提问者接着说哦,这很有效!所以我认为他只需要纠正他的问题。但是现在经过一些编辑之后,看起来他真的是指jQuery对象,所以我可能会在问题冷却后删除它。无论如何,这是一篇有用的文章。我仍然想知道为什么这会起作用:$[A,B,C,D]。每个函数{…}只从B,C和D中获取第一个DOM项。这不是A,B,C和D的真正结合。@jfriend00-是的,我在回答中指出这是一个问题。这真的值得投反对票吗?+1-这可能是最通用的解决方案,因此是最好的答案,因为问题有点含糊不清。如果你能解释为什么$[a,B,C,D],我会接受的。每一个仍然有效,但$[a,B,C,D]。show不起作用?请看我对namuol问题的评论。@vantrung cuncon添加了一些关于jquery如何工作的信息,我很担心,但是我仍然无法想象里面会发生什么。最重要的一点是:$[A,B,C,D]的真正本质是什么,它返回了什么?是的,正如我所说的最简单的方法,这个答案是不可能的。但既然jQuery对象都是原始数组,为什么我们不能用数组的concat方法将它们连接起来呢。我认为$.merge存在一些奇怪的兼容性问题。。。不确定。我尝试了这个,但是。concat不适用于jQuery对象:。如果有,您可以使用多个数组作为参数,因此A.concatB、C、D可以工作。。。但事实并非如此。我认为jquery对象根本不是一个原始数组。我们不能使用jqObj.concat。但是我们可以使用:$[A].concatB、C、D返回
与real array的效果相同我从未说过jQuery对象是原始数组$instanceof array===false,但它是数组:在Firebug/Chrome控制台中查看它,它看起来像一个数组。还可以使用$'a'[n]获取jQuery对象中的第n个DOM元素。作为补充说明,您可以使用$'selector.get获取原始数组。
A.add([B[0], C[0], D[0]]).show();
var union = $.merge( $.merge(A,B), $.merge(C,D) );
var union = $([].concat(A.get(), B.get(), C.get(), ...));
// Assuming A, B, C... are jQuery objects