Самый простой способ создать объект jQuery с

да, то, как я делал это

   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)

оба работают. Но!--6-->

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

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

4 ответов


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

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

демо: http://jsfiddle.net/SCjMc/1/


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

$(element) является ярлыком для jQuery(element). The 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])

вот самая короткая версия, которую я мог придумать:

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

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

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


предполагая, что у вас есть необработанные элементы DOM (не объекты jQuery, такие как $('#abc') или $('.abc')), нет необходимости использовать add:

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

см. документацию $(...)


чтобы получить набор, полученный в результате объединения нескольких объектов 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