私は以下の要件があると仮定します:要素がある場合は"x"
の要素にe
要素を追加し、そうでない場合はe
を本文に追加します。 DOMレベル0で別のものが存在しない場合、JQueryで要素を選択するうまい方法がありますか?
、私は書くことができる:ID x
とは要素が、最初の論理和が存在しないため、場合
var parent = $("#x") || $("body");
parent.append(e);
:jQueryので
var parent = document.getElementById("x") || document.body;
parent.appendChild(e);
を、以下では、ない作業を行います空のjqueryオブジェクトを返す。真実で、偽ではないので、append
は何もしない。私は、しかし、書くことができます。
var parent = $("#x")[0] || $("body")[0];
parent.appendChild(e);
が、jQueryオブジェクトのインデックスを作成することはHTMLElementsに戻って私を取得しているため、この解決策はやや不格好なので、私はappendChild
の代わりappend
使用しなければなりません。これが機能している間、私はこのレベルの混合が適切であるか、または悪い設計の指標かどうか疑問に思っています。
使用方法があるかもしれませんfirst()
?おそらく、最初の要素がid xのdivで、2番目がbodyだったという本質的な配列だったjQueryオブジェクトを作成することができました。私は要素配列を取るjQueryのコンストラクタフォームでこれを行うことができることを知っていますが、次にレベルの混合に戻ります。私はid x($("#x").length
)の要素の存在を調べる方法も知っていますが、これがどのようにして "id xが存在する場合は要素"、それ以外の場合は "body"という要素をエレガントにする方法がわかりません。
このような製剤は存在しますか?
ああ、これはかなりですが、jQueryがここで本当に深刻な魔法を働かない限り、短絡の代わりに最初の要素を返す前にすべての*要素を選択するというパフォーマンスの欠点があります。それでもパフォーマンスのレベルを気にしていれば、まずはjQueryを使用するべきではありません。 – Matchu
いいえ、これは動作しません。「返されたjQueryオブジェクトのDOM要素の順序は、ドキュメント順になるので同じではないかもしれません。」](http://api.jquery.com/multiple-セレクタ/)。例:http://jsfiddle.net/ambiguous/edYY6/。毎回 '
'が表示されます。 –これはとても良いことに同意しました。最初のものはページ上で一意でなければならないIDを持ち、2番目のものは** the ** body要素ですから、どちらか一方のIDは大丈夫です(またはそうでなければなりません)。 HTMLにはこれらのうちの1つだけあるべきです。 –