回答:
私のお気に入りは、この小さな便利さでjQueryを拡張することです。
$.fn.exists = function () {
return this.length !== 0;
}
次のように使用:
$("#notAnElement").exists();
長さを使用するよりも明確です。
this
ほうがに比べてずっと便利だと思いますtrue
。Railsのpresence
メソッドを移植した私の答えを見てください。
this
して変数に割り当てたい場合は、returnステートメントをCSharpが持っているものに変更することをお勧めします。
セレクターはjQueryオブジェクトの配列を返します。一致する要素が見つからない場合は、空の配列を返します。あなたは確認することができます.length
最初の配列要素は、「未定義」であるかどうかチェックセレクタによって返されるコレクションのを。
IFステートメント内で次の例を使用すると、すべて同じ結果が生成されます。セレクタが一致する要素を見つけた場合はtrue、それ以外の場合はfalse。
$('#notAnElement').length > 0
$('#notAnElement').get(0) !== undefined
$('#notAnElement')[0] !== undefined
私はこのようなことをするのが好きです:
$.fn.exists = function(){
return this.length > 0 ? this : false;
}
だからあなたはこのようなことをすることができます:
var firstExistingElement =
$('#iDontExist').exists() || //<-returns false;
$('#iExist').exists() || //<-gets assigned to the variable
$('#iExistAsWell').exists(); //<-never runs
firstExistingElement.doSomething(); //<-executes on #iExist
TypeError: firstExistingElement.doSomething is not a function
。あなたは....もし()で変数全体の割り当て/テストをラップし、唯一の要素が見つかった場合に何かを行うことができます
Ruby on Railspresence
からインスピレーションを得て使用したい:
$.fn.presence = function () {
return this.length !== 0 && this;
}
あなたの例は次のようになります:
alert($('#notAnElement').presence() || "No object found");
$.fn.exists
ブール演算子またはを引き続き使用できるため、提案されたものより優れていますif
が、真実の結果の方が便利です。もう一つの例:
$ul = $elem.find('ul').presence() || $('<ul class="foo">').appendTo($elem)
$ul.append('...')
私の好み、そしてなぜこれがjQueryにまだないのか私にはわかりません:
$.fn.orElse = function(elseFunction) {
if (!this.length) {
elseFunction();
}
};
このように使用されます:
$('#notAnElement').each(function () {
alert("Wrong, it is an element")
}).orElse(function() {
alert("Yup, it's not an element")
});
または、CoffeeScriptを見ると次のようになります。
$('#notAnElement').each ->
alert "Wrong, it is an element"; return
.orElse ->
alert "Yup, it's not an element"
これはjQueryのドキュメントにあります:
http://learn.jquery.com/using-jquery-core/faq/how-do-i-test-whether-an-element-exists/
alert( $( "#notAnElement" ).length ? 'Not null' : 'Null' );
デフォルトでこれを常に実行したい場合があります。エラーなしにこれを行うためにjquery関数またはjquery.fn.initメソッドをラップするのに苦労してきましたが、jqueryソースに簡単な変更を加えることでこれを行うことができます。含まれているのは、検索できる周囲の行です。私はjqueryソースを検索することをお勧めしますThe jQuery object is actually just the init constructor 'enhanced'
var
version = "3.3.1",
// Define a local copy of jQuery
jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
// Need init if jQuery is called (just allow error to be thrown if not included)
var result = new jQuery.fn.init( selector, context );
if ( result.length === 0 ) {
if (window.console && console.warn && context !== 'failsafe') {
if (selector != null) {
console.warn(
new Error('$(\''+selector+'\') selected nothing. Do $(sel, "failsafe") to silence warning. Context:'+context)
);
}
}
}
return result;
},
// Support: Android <=4.0 only
// Make sure we trim BOM and NBSP
rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
jQuery.fn = jQuery.prototype = {
最後に重要なことですが、ここで非圧縮jqueryソースコードを取得できます。http://code.jquery.com/