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

如何构建包含指定元素的自定义jQuery对象?

如何构建包含指定元素的自定义jQuery对象?

我来帮你搞定这个问题~你遇到的核心问题是,之前用$([ele1, ele2])创建的并不是标准的jQuery元素集合,而是一个包裹了两个jQuery对象的特殊集合,所以链式调用才会出问题。下面给你几种靠谱的解决方法:

方法1:用add()方法逐步构建集合

这是最直观的方式,先创建一个空的jQuery对象,然后把你需要的元素逐个加进去:

function getSelection() {
  var ele1 = $('<p></p>').appendTo('body');
  var ele2 = $('<p></p>').prependTo('html');
  // 空jQuery对象 + 依次添加元素
  return $().add(ele1).add(ele2);
}

这样返回的就是标准的jQuery集合,直接支持你想要的链式操作:

console.log('font', getSelection().first().css('font-family'));

方法2:直接传入DOM元素数组

jQuery的构造函数可以接收DOM元素组成的数组,所以你只需要把每个jQuery对象对应的DOM元素取出来再传入就行:

function getSelection() {
  var ele1 = $('<p></p>').appendTo('body');
  var ele2 = $('<p></p>').prependTo('html');
  // 提取DOM元素组成数组,传入$()创建标准集合
  return $( [ele1[0], ele2[0]] );
}

这种方式创建的集合同样能无缝支持所有jQuery链式方法。

方法3:用$.merge()合并元素集合

jQuery提供了$.merge()方法可以合并两个jQuery对象的元素列表,返回合并后的DOM元素数组,再把这个数组传给$()就能得到标准集合:

function getSelection() {
  var ele1 = $('<p></p>').appendTo('body');
  var ele2 = $('<p></p>').prependTo('html');
  // 合并两个jQuery对象的元素,转为新的jQuery集合
  return $( $.merge(ele1, ele2) );
}

为什么原来的写法失效?

你之前写的$([ele1, ele2]),数组里装的是两个jQuery对象,而不是原生DOM元素。jQuery会把这两个jQuery对象当成普通JS对象来包裹,所以你的集合里的每一项都是jQuery对象,而非DOM节点。这就导致调用.first()后拿到的是包含ele1的项,必须再取[0]才能拿到真正可调用方法的jQuery对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:07:48