有可能将几个jQuery DOM对象合并到一个数组中并在所有数组上调用jQuery方法吗?
F.ex:
<button>one</button>
<h3>two</h3>
<script>
var btn = $('button');
var h3 = $('h3');
$([btn,h3]).hide();
</script>
Run Code Online (Sandbox Code Playgroud)
这不起作用.我知道我可以使用'button,h3'选择器,但在某些情况下我已经有几个jQuery DOM元素,我需要合并它们,所以我可以在所有这些上调用jQuery原型.
就像是:
$.merge([btn,h3]).hide();
Run Code Online (Sandbox Code Playgroud)
会工作.有任何想法吗?
更新:
解决了它.你可以这样做:
$.fn.add.call(btn,h3);
Run Code Online (Sandbox Code Playgroud)
我将接受这个add()建议,指出我正确的方向.
nic*_*ckf 21
.add() 完全是你所追求的.
h3.add(btn).hide();
Run Code Online (Sandbox Code Playgroud)
如果您想让自己更方便一点,使用像您的问题中的"合并"功能,可以轻松添加:
$.merge = function(objs) {
var ret = objs.shift();
while (objs.length) {
ret.add(objs.shift());
}
return ret;
};
$.merge([h3, btn]).hide()
Run Code Online (Sandbox Code Playgroud)
$.map 可以展平数组:
function merge(array_of_jquery_objects) {
return $($.map(array_of_jquery_objects, function(el) {
return el.get();
}));
}
Run Code Online (Sandbox Code Playgroud)
$(btn).add(h3).hide();
Run Code Online (Sandbox Code Playgroud)
不确定它是否有效,add的文档没有提到将jQuery对象作为参数而只是一个元素列表,所以如果这不起作用,则应该:
$(btn).add(h3.get()).hide();
Run Code Online (Sandbox Code Playgroud)