不需要重新选择,将相同的函数应用于多个jQuery对象

3

我习惯在函数顶部声明所需的所有对象,这些对象用于缓存和保持应用程序快速。例如,我有类似以下代码:

var $object1 = $('#my_element'),
    $object2 = $('.other_elements'),
    $object3 = $('.again_something_else');

我在代码中单独使用这些变量,例如$object1.doSomething()$object2.doElse(),但在某些情况下,我需要将同一个函数应用于已选择的两个或多个变量。有一种方法可以将这些变量合并在一起,以避免重新选择我需要的元素吗?

我想避免这种情况:

 $('#my_element, .other_elements').myFunction()

并且复用我已经有的变量。


2
.each()不就是做这个的吗?” - fge
jQuery中的each是隐式的,我想将对象合并在一起。 - Mimo
$.each([$object1,$object2], function(index, val) { val.myFunction(); }); - dc5
2个回答

3
你可以使用 add:

描述:将元素添加到匹配的元素集合中。

如果您想要合并 $object1$object2,您可以这样做:
var $one_and_two = $object1.add($object2);

演示: http://jsfiddle.net/ambiguous/DHJvR/1/

add 不会修改任何东西,它只是将所选元素合并为一个新的jQuery对象并返回,因此$x.add(...)$object1不会产生任何影响(感谢Jan Dvorak提醒/修正了这一点)。


我不理解这个方法的奇怪外观:如果我这样做会怎么样:var $one_and_two = $($object1).add($object2); - Mimo
@mimo:那应该基本上是一样的。 - mu is too short
1
给定一个代表一组DOM元素的jQuery对象,.add()方法从这些元素和传递到该方法中的元素的并集构造一个新的jQuery对象。不需要创建一个新的空jQuery对象。 - John Dvorak
@JanDvorak:好的,谢谢提醒。由于某种原因,我认为$x.add(...)修改了$x - mu is too short

-1

你可以使用jQuery.merge将元素缓存合并在一起,因为它们本质上是数组。

jQuery.merge($object1, $object2).myFunction();

请注意,$object1将包含合并的列表,因此您将无法重新使用缓存。您可以通过以下方式避免这种情况:

$.merge( $.merge([], $object1), $object2);

在我看来,我认为这样做会更简单:

function assignHandler () {
    $object1.myFunction();
    $object2.myFunction();
}

将两个数组的内容合并到第一个数组中。 - Mimo
1
$.merge: 返回值:数组 - Fabrício Matté

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接