1

当使用 .map() 方法时,我得到了一个我认为有两个节点的数组(不是 jQuery 对象/匹配集)。我想申请这组课程,但没有任何反应。

$('input#substance, input[name="atc_code"]').map(function() {return $(this).prevAll('label:first')});

回报:

[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:

<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>
4

1 回答 1

0

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

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

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

$('input#substance, input[name="atc_code"]').map(function() {return $(this).prevAll('label:first')[0]});
// The new bit -----------------------------------------------------------------------------------^^^

实例| 直播源

或者,您可以在没有以下情况下执行此操作.map

$('input#substance').prevAll('label').first().add(
  $('input[name="atc_code"]').prevAll('label').first()
);

实例| 直播源

于 2013-10-04T09:07:46.377 回答