1

.map() メソッドを使用すると、2 つのノードを持つ配列が返されます (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 オブジェクトであるという混乱を招く時期の 1 つです。99.999% の確率で、jQuery セットには DOM 要素が含まれていますが、jQuery セットに他の要素が含まれている可能性もあります。特に、 を使用する.mapと、結果の jQuery オブジェクトには、マッピング関数が返すものはそのまま含まれます。あなたの場合、マッピング関数から jQuery オブジェクトを返していたので、それが結果の jQuery セットに含まれていました。(これで十分に混乱しない場合、jQuery には2 つの異なるmapメソッドもあります。1 つはインスタンスに固有で、使用した 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 に答える