当使用.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>
发布于 2013-10-04 01:07:46
它选择正确,但为什么我不能使用这个数组?为什么它不是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()
);
https://stackoverflow.com/questions/19177276
复制