You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将两个含选择器的变量传入jQuery的$()函数

问题:如何合并两个jQuery对象并调用wrapAll方法?

原工作代码:

$(".field--name-field-upload-artwork details table, .field--name-field-upload-artwork .js-form-type-managed-file").wrapAll('<div class="upload-file-wrapper"></div>');

我将选择器对应的jQuery对象存入变量:

let $uploadedFilesTable = $(".field--name-field-upload-artwork details table");
let $dragAndDrop = $(".field--name-field-upload-artwork .js-form-type-managed-file");

但以下两种写法均无法正常运行:

$(${$uploadedFilesTable} + ',' + ${$dragAndDrop}).wrapAll('<div class="upload-file-wrapper"></div>');
$($uploadFilesTable + ',' + $dragAndDrop).wrapAll('<div class="upload-file-wrapper"></div>');

请问如何正确将这两个jQuery对象传入$()函数并调用wrapAll?


解决方案

方法一:用jQuery的add()方法合并对象

这是最简便的方式,你已经有了两个现成的jQuery对象,直接用add()把它们合并成一个新的jQuery对象,再调用wrapAll即可:

$uploadedFilesTable.add($dragAndDrop).wrapAll('<div class="upload-file-wrapper"></div>');

方法二:通过数组合并DOM元素后传入$()

jQuery支持接收DOM元素数组作为参数,你可以先把两个jQuery对象里的DOM元素提取出来合并成数组,再传给$():

// 适合每个变量只匹配一个元素的场景
$([$uploadedFilesTable[0], $dragAndDrop[0]]).wrapAll('<div class="upload-file-wrapper"></div>');

// 适合变量匹配多个元素的场景
$($uploadedFilesTable.get().concat($dragAndDrop.get())).wrapAll('<div class="upload-file-wrapper"></div>');

方法三:变量存储选择器字符串而非jQuery对象

如果你想保留字符串拼接的思路,那变量应该存选择器字符串,而不是实例化后的jQuery对象:

let uploadedFilesTableSelector = ".field--name-field-upload-artwork details table";
let dragAndDropSelector = ".field--name-field-upload-artwork .js-form-type-managed-file";
$(uploadedFilesTableSelector + ',' + dragAndDropSelector).wrapAll('<div class="upload-file-wrapper"></div>');

为什么之前的写法无效?

你之前的错误在于把已经实例化的jQuery对象当成字符串去拼接,得到的结果是[object Object],[object Object]——这显然不是有效的CSS选择器,jQuery无法解析,所以执行失败。


内容的提问来源于stack exchange,提问作者nathan111777

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 10:25:43