当使用.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>
答案 0 :(得分:0)
它选择正确,但为什么我不能使用这个数组?为什么它不是jQuery对象?
确实如此,但是当jQuery对象中的元素本身就是jQuery对象时,这是令人困惑的时期之一。 99.999%的时间,jQuery集包含DOM元素,但可能包含其他东西的jQuery集。特别是,当您使用.map
时,生成的jQuery对象包含您的映射函数返回的任何内容,保持不变。在您的情况下,您从映射函数返回jQuery对象,这就是生成的jQuery集中的内容。 (如果这不够混淆,jQuery还有两个不同的map
方法:one that's specific to instances并返回一个jQuery对象,这是你使用的那个,一个是not specific to an instance并返回一个数组。)
您可以通过让映射函数返回原始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()
);