合并jQuery对象

Dav*_*ing 63 jquery

有可能将几个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)

  • JQuery现在有一个合并函数,所以应该使用$ .merge以外的东西. (10认同)
  • 如果我没弄错,`jQuery.Add`方法会导致生成一个新的`jQuery`对象,而不是修改调用该方法的原始对象.是不是`ret = ret.Add(objs.shift());`? (4认同)

Tgr*_*Tgr 8

$.map 可以展平数组:

function merge(array_of_jquery_objects) {
    return $($.map(array_of_jquery_objects, function(el) {
        return el.get();
    }));
}
Run Code Online (Sandbox Code Playgroud)


svi*_*nto 5

$(btn).add(h3).hide();
Run Code Online (Sandbox Code Playgroud)

不确定它是否有效,add的文档没有提到将jQuery对象作为参数而只是一个元素列表,所以如果这不起作用,则应该:

$(btn).add(h3.get()).hide();
Run Code Online (Sandbox Code Playgroud)