Ответ 1
Вы можете использовать метод add.
Можно ли объединить несколько объектов 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()
, чтобы указать мне в правильном направлении.
Вы можете использовать метод add.
.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()
$.map
может сгладить массивы:
function merge(array_of_jquery_objects) {
return $($.map(array_of_jquery_objects, function(el) {
return el.get();
}));
}
$(btn).add(h3).hide();
Не уверен, что он работает, но документация для добавления не упоминает хайв-объект jQuery как параметр, а только список элементов, поэтому, если это не работает, это должно:
$(btn).add(h3.get()).hide();
var x = $('script'),
y = $('b'),
z = $('body');
$( $.map([x,y,z], a => [...a]) )
Используйте этот.
<script>
var btn = $('button')[0];
var h3 = $('h3')[0];
$([btn,h3]).hide();
</script>