Самый простой способ создать набор объектов 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