Самый простой способ создать набор объектов jquery s

Да, способ, которым я занимался, -

   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

Работает только вторая строка. Кто-нибудь знает разницу между ними? (Я просто думал, что они такие же, а потом немного запутался в моем вопросе)

Ответ 1

$.each([A,B,C,D], function(){ 
    $(this).css('background','red'); 
})

Вместо использования селектора это решение использует метод jQuery под названием $. each, который принимает массив и выполняет итерацию по нему. Переданный массив представляет собой набор объектов jQuery. $(this) ссылается на объекты jQuery, которые повторяются каждый раз.

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


Другие факты о том, как работает $():

$(element) является ярлыком для jQuery(element). Метод jQuery() принимает другой набор параметров:

enter image description here

Описание каждого типа параметра можно найти в этой ссылке.

Одним из параметров является "elementArray". Описание для этого:

elementArray Массив, содержащий набор элементов DOM для переноса в объект jQuery.

Уловка заключается в том, что при использовании jQuery для выбора элемента он возвращает объект jQuery, а не элемент DOM напрямую. Следовательно, это будет не возвращать любые элементы:

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

Чтобы вернуть элемент DOM вместо объекта jQuery, вам нужно получить доступ к свойству в позиции 0 объекта jQuery. Как следует: $("element")[0]. Вот почему этот будет работать:

var element1 = $("selector1")[0]; //accessing dom element 
var element2 = $("selector2")[0]; //from jQuery object
$([element1,element2])

Ответ 2

Вот кратчайшая версия, о которой я мог подумать:

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

Это передается в массиве элементов, а не в объектах jQuery. Работает только в том случае, если B, C и D являются одноэлементными массивами.

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

Ответ 3

Предполагая, что у вас есть необработанные элементы 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/

Ответ 4

Чтобы получить набор, полученный в результате объединения нескольких объектов jQuery (которые являются "просто" массивами в некотором роде), вы можете использовать $.merge:

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

$.merge работает только на пару массивов, поэтому использование этого на большом количестве объектов jQuery будет очень утомительным... в этом случае вы можете использовать $().get() для получения "необработанного" массива и concat их вместе:

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