Объединение объектов jQuery

Можно ли объединить несколько объектов DOM jQuery в один массив и вызвать методы jQuery для всех из них?

f.ex:

<button>one</button>
<h3>two</h3>

<script>

var btn = $('button');
var h3 = $('h3');

$([btn,h3]).hide();

</script>

Это не работает. Я знаю, что я могу использовать селектор "button, h3" здесь, но в некоторых случаях у меня уже есть несколько элементов DOM jQuery, и мне нужно объединить их, чтобы я мог вызывать прототипы jQuery для всех из них.

что-то вроде:

$.merge([btn,h3]).hide();

будет работать. Любые идеи?

UPDATE:

Решил. Вы можете сделать это следующим образом:

$.fn.add.call(btn,h3);

Я собираюсь принять предложение add(), чтобы указать мне в правильном направлении.

Ответ 1

Вы можете использовать метод add.

Ответ 2

.add() делает именно то, что вам нужно.

h3.add(btn).hide();

Если вы хотите сделать это немного более удобным для себя, с функцией "слияния", как в вашем вопросе, это можно легко добавить:

$.merge = function(objs) {
    var ret = objs.shift();
    while (objs.length) {
        ret.add(objs.shift());
    }
    return ret;
};

$.merge([h3, btn]).hide()

Ответ 3

$.map может сгладить массивы:

function merge(array_of_jquery_objects) {
    return $($.map(array_of_jquery_objects, function(el) {
        return el.get();
    }));
}

Ответ 4

$(btn).add(h3).hide();

Не уверен, что он работает, но документация для добавления не упоминает хайв-объект jQuery как параметр, а только список элементов, поэтому, если это не работает, это должно:

$(btn).add(h3.get()).hide();

Ответ 5

Получить некоторые объекты jQuery:

var x = $('script'),
    y = $('b'),
    z = $('body');

Создайте новый объект jQuery, содержащий все остальные объекты:

$( $.map([x,y,z], a => [...a]) )

Ответ 6

Используйте этот.

<script>

var btn = $('button')[0];
var h3 = $('h3')[0];

$([btn,h3]).hide();

</script>