首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >jQuery的.map()返回数组,而不是匹配的集合(jQuery对象)

jQuery的.map()返回数组,而不是匹配的集合(jQuery对象)
EN

Stack Overflow用户
提问于 2013-10-04 09:04:21
回答 1查看 360关注 0票数 1

当使用.map()方法时,我将返回一个包含两个节点的数组(不是jQuery对象/匹配集)。我想应用这个集合的类,但是什么都没有发生。

代码语言:javascript
代码运行次数:0
运行
复制
$('input#substance, input[name="atc_code"]').map(function() {return $(this).prevAll('label:first')});

返回:

代码语言:javascript
代码运行次数:0
运行
复制
[x.fn.x.init[1], x.fn.x.init[1]]

[
x.fn.x.init[1]
0: label
context: input#substance.ui-autocomplete-input
length: 1
prevObject: x.fn.x.init[1]
__proto__: Object[0]
, 
x.fn.x.init[1]
0: label
context: input.small ui-autocomplete-input
length: 1
prevObject: x.fn.x.init[1]
__proto__: Object[0]

它选择正确,但为什么我不能使用这个数组?为什么它不是jQuery对象?

HTML:

代码语言:javascript
代码运行次数:0
运行
复制
<div class="fieldset-container">
   <label>Substance</label>
   <span role="status" aria-live="polite" class="ui-helper-hidden-accessible"></span> 
   <input type="text" name="substance" id="substance" maxlength="22" autocomplete="off" spellcheck="false" autofocus="autofocus" class="ui-autocomplete-input">

   <label title="Required field">ATC code<span class="ma">*</span></label>
   <span role="status" aria-live="polite" class="ui-helper-hidden-accessible"></span><input type="text" class="small ui-autocomplete-input" name="atc_code" maxlength="7" autocomplete="off" spellcheck="false">

   <label>Year</label>
   <div class="small">
      <select name="year">...</select>
   </div>
</div>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-04 09:07:46

它选择正确,但为什么我不能使用这个数组?为什么它不是jQuery对象?

是的,但这是jQuery对象中的元素本身就是jQuery对象的混乱时期之一。99.999%的情况下,jQuery集包含DOM元素,但是jQuery集包含其他内容是可能的。特别是,当您使用.map时,生成的jQuery对象包含映射函数返回的任何内容,不变。在您的示例中,您从映射函数返回jQuery对象,这就是生成的jQuery集中的内容。(如果这还不够混乱的话,jQuery还有两个不同的map方法:特定于实例的和返回一个jQuery对象,这是您使用的对象,另一个是不特定于实例,并返回一个数组。)

您可以通过让映射函数返回原始DOM元素来解决这个问题:

代码语言:javascript
代码运行次数:0
运行
复制
$('input#substance, input[name="atc_code"]').map(function() {return $(this).prevAll('label:first')[0]});
// The new bit -----------------------------------------------------------------------------------^^^

实例化 x- 活源

或者,您可以不使用.map来完成此操作。

代码语言:javascript
代码运行次数:0
运行
复制
$('input#substance').prevAll('label').first().add(
  $('input[name="atc_code"]').prevAll('label').first()
);

实例化 x- 活源

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19177276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档