4

次の jQuery の質問Need help in Optimizing the below jquery code.find()に答える過程で、とに関する別の質問に出くわしました.children()

問題は、ID がstatecitybranchbranchAddressの 4 つの選択ボックスがある場合、各選択ボックスの最初のオプションを除くすべてを削除することでした。

いくつかの回答が投稿されています。それらの中には:

  1. $('#state,#city,#branch,#branchAddress').children('option:not(:first)').remove();
  2. $('#state,#city,#branch,#branchAddress').children('option:not(:first-child)').remove();
  3. $('#state,#city,#branch,#branchAddress').find('option:not(:first)').remove();

このjsフィドル( http://jsfiddle.net/QkNRf/1/ )によると、解決策1は機能していないようです(最初の選択ボックスの最初のオプションを除くすべてのオプションを削除します)

解決策 2 と 3 は完全に機能しているようです。

誰かが私が見逃したことを指摘してくれたり、解決策 1 が機能しないのに解決策 3 が機能する理由を説明してくれたりするとうれしいです。

4

2 に答える 2

6

他のすべての答えは正しいですが、例1が失敗する理由と番号3が機能する理由を説明するドキュメントの重要な部分は.children()、前のセレクターからの結果を効果的にフィルタリングしながら、セレクターコンテキスト.find()検索を実行することだと思います(私は仮定します) 4つのコンテキストすべてで検索を実行し、結果を照合しますが、最初に結果を照合し、最初のコンテキスト以外をすべて効果的に削除してフィルタリングします...'option:not(:first)'.children()'option:not(:first)'

この場合、検索の深さは関係ありません。

于 2012-12-03T16:30:07.120 に答える
4

ドキュメントから:.children()

.children()メソッドは.find()とは異なり、.children()はDOMツリーを1レベル下に移動するだけですが、.find()は複数のレベルを下に移動して、子孫要素(孫など)も選択できます。

于 2012-12-03T16:17:48.073 に答える