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

发布于 2024-12-06 21:31:53 字数 660 浏览 1 评论 0原文

是的,我所做的就是

   A.add(B).add(C).add(D).show()

虽然 A、B、C、D 是 jQuery 对象。我想知道是否有更简单的方法可以做到这一点? 我已经尝试了以下所有方法,但没有结果:

$(A,B,C,D).show()
A.add(B,C,D).show()

欢迎所有建议!


添加以澄清问题:

“.show()”部分仅用于演示。我只是想知道如何创建一组 JQuery 对象,例如 $('p') 创建一组 p 标签。

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

$([A,B,C,D]).each(fn)

而不是 .show() (我想知道为什么这有效?) 显然

$([A,B,C,D]).each(fn)
$('p').each(fn)

两者都有效。但

$([A,B,C,D]).show()  //--doesn't work
$('p').show()        //--works

只有第二行有效。有谁知道它们之间的区别? (我只是认为它们是相同的,然后在我的问题中做了一些纠结)

Yeah, the way I was doing is

   A.add(B).add(C).add(D).show()

While A,B,C,D are jQuery objects. I wonder if there's such a simpler way to do this out there?
I've tried all the following approaches, but no results:

$(A,B,C,D).show()
A.add(B,C,D).show()

All suggestions are welcome!


Addition to clarify the question:

The part ".show()" is just for demonstration. I just wanted to know how could I create a set of JQuery object like $('p') create a set of p tag.

In my real case, I used

$([A,B,C,D]).each(fn)

instead of .show() (And I wonder why this worked?)
It's obviously that

$([A,B,C,D]).each(fn)
$('p').each(fn)

both work. But

$([A,B,C,D]).show()  //--doesn't work
$('p').show()        //--works

Just the second line works. Does anyone know the diffrence between them ?
(I just thought they're the same, then made a bit of tangle in my question)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

飘落散花 2024-12-13 21:31:53
$.each([A,B,C,D], function(){ 
    $(this).css('background','red'); 
})

该解决方案不使用选择器,而是使用名为 $.each 的 jQuery 方法,该方法采用数组并迭代它。传递的数组是一组 jQuery 对象。 $(this) 指的是每次迭代的 jQuery 对象。

演示: http://jsfiddle.net/SCjMc/1/


关于 $() 工作原理的其他事实:

$(element)jQuery(element) 的快捷方式。 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]。这就是为什么这个起作用:

var element1 = $("selector1")[0]; //accessing dom element 
var element2 = $("selector2")[0]; //from jQuery object
$([element1,element2])
$.each([A,B,C,D], function(){ 
    $(this).css('background','red'); 
})

Instead of using a selector this solution uses a jQuery method called $.each which takes an array and iterates over it. The array passed is a set of jQuery objects. $(this) referes to the jQuery objects being iterated on each time.

demo: http://jsfiddle.net/SCjMc/1/


Other facts about how $() works:

$(element) is an shortcut for jQuery(element). The jQuery() method accepts a different set of parameters:

enter image description here

The description for each type of parameter can be found in this link.

One of the type of parameters is "elementArray". The description for this is:

elementArray An array containing a set of DOM elements to wrap in a jQuery object.

The catch is that when you use jQuery to select an element this returns a jQuery object and not a DOM Element directly. Therefore this will not return any elements:

var element1 = $("selector1");
var element2 = $("selector2");
$([element1,element2]) // will not return any elements

To return a DOM Element instead of a jQuery object you have to access the property in the position of 0 of the jQuery object. As follows: $("element")[0]. And that is why this will work:

var element1 = $("selector1")[0]; //accessing dom element 
var element2 = $("selector2")[0]; //from jQuery object
$([element1,element2])
晚雾 2024-12-13 21:31:53

这是我能想到的最短版本:

A.add([B[0], C[0], D[0]]).show();

它传递一个元素数组,而不是 jQuery 对象。仅当 BCD 是单元素数组时才有效。

http://jsfiddle.net/nrabinowitz/Jb6VD/1/

Here's the shortest version I could think of:

A.add([B[0], C[0], D[0]]).show();

This passes in an array of elements, rather than jQuery objects. Only works if B, C, and D are single-element arrays.

http://jsfiddle.net/nrabinowitz/Jb6VD/1/

ˉ厌 2024-12-13 21:31:53

假设您有原始 DOM 元素(不是 jQuery 对象,例如 $('#abc')$('.abc')),无需使用 add

$([A,B,C,D]).show();

请参阅 $(.. .) 函数了解详细信息。


如果您确实想要类似 $(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();

工作示例: http://jsfiddle.net/Jb6VD/5/

Assuming you have raw DOM elements (not jQuery objects such as $('#abc') or $('.abc')), there's no need to use add:

$([A,B,C,D]).show();

See the documentation of the $(...) function for details.


If you really want something like $(A,B,C,D) where A,B,C,D are jQuery objects, then the only real way is to roll your own function.

This does the trick:

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

// ...

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

Working example: http://jsfiddle.net/Jb6VD/5/

菊凝晚露 2024-12-13 21:31:53

要获得由多个 jQuery 对象(在某种程度上“只是”数组)合并而成的集合,您可以使用 $.merge

var union = $.merge( $.merge(A,B), $.merge(C,D) );

$.merge 只能工作在一对数组上,因此在大量 jQuery 对象上使用它会变得非常烦人......在这种情况下,您可以使用 $().get() 来获取“原始”数组并将它们连接在一起:

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

To get the set resulting from the union of several jQuery objects (which are "just" arrays in a way), you can use $.merge:

var union = $.merge( $.merge(A,B), $.merge(C,D) );

$.merge only works on a pair of arrays, so using this on a large amount of jQuery objects would get very tiresome... in this case, you can use $().get() to obtain the "raw" array and concat them together:

var union = $([].concat(A.get(), B.get(), C.get(), ...));
// Assuming A, B, C... are jQuery objects
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文