15

jQueryを使用して要素をチェックするよりセマンティックな方法の作成に取り組んでいます。使用$("#element").length > 0することは私にはあまりよく表現されていないので、私はで使用するために独自のセレクターを追加しています.is

if($("#element").is(":present")) {
  console.log("It's aliiiveeee!!");
}

その部分は次のように簡単でした:

$.extend($.expr[':'],{
    present: function(a) {
        return $(a).length > 0;
    }
});

さらに一歩進んで、同様の構文を使用して、要素が存在しないかどうかを簡単に確認できるようにします。

$.extend($.expr[':'],{
    present: function(a) {
        return $(a).length > 0;
    },
    absent: function(a) {
        return $(a).length === 0;
    }
});

$(function() {
  if($("#element").is(":absent")) {
    console.log("He's dead, Jim.");
  }
});

しかし、この部分は驚くほど難しいです。結果を得るために返された要素をペアリングしているためだと思います。セレクターを.length===0にペアリングすることは、elelementsを要求しないことと同じです。何があってもfalseを返します。

私は物事を逆転させ、要素が存在しない場合はtrueを返し、存在する場合はfalseを返すために、さまざまな方法を試しました。

return $(a).length === 0;

return !($(a).length > 0);

if(!($(a).length > 0)) { 
  return true;
} 

if($(a).length > 0) { 
  return false;
} else {
  return true;
}

return !!($(a).length === 0);

// etc...

要素が存在しない場合はtrueを返し、存在する場合はfalseを返す簡単な方法はありますか?

4

5 に答える 5

14

の定義is:

現在一致している要素のセットをセレクター、要素、または jQuery オブジェクトに対してチェックし、これらの要素の少なくとも 1 つが指定された引数と一致する場合は true を返します。

問題は、要素がないため、要素の 1 つが何らかの条件に一致する可能性がないことです。要素がないため、jQuery はコードを呼び出していません。

EDIT:少し明確にするために、コードはオブジェクト内のすべての要素に対して1回呼び出されています(少なくとも1つがtrueを返すまで)。要素がないということは、コードが呼び出されないことを意味します。 aあなたのコードでは常に単一の要素です。

EDIT2:それを念頭に置いて、これはより効率的な実装になりますpresent

$.extend($.expr[':'],{
    present: function(a) {
        return true;
    }
});
于 2012-04-15T21:10:55.297 に答える
6

簡単に使用できます

if(​$('element').length) // 1 or 0 will be returned

また

$.extend($.expr[':'],{
    present: function(a) {
        return $(a).length;
    }
});

if($('#element').is(':present'))
{
    // code for existence
}
else
{
    // code for non-existence
}

于 2012-04-15T21:13:07.897 に答える
2

$().is()コレクションが空の場合でも実行されないことを考えると、:presentセレクターはかなり不要です。したがって、で遊ぶのではなく、適切な機能を含むよう$.expr[':']に拡張します。たとえば、次のようになります。$.fn

$.fn.extend({
    hasAny: function() {
        return this.length > 0;
    },
});

また

$.fn.extend({
    isEmpty: function() {
        return this.length == 0;
    },
});

私が個人的にこのアプローチを採用する理由は、セレクターは通常、jQuery 要素セット全体のプロパティ ( 、など) ではなく:checked、要素の特定のプロパティ (比較、:enabled:selected、など) をチェックするために使用されるためです。:hover.size().index()

もちろん、使用法は次のようになります。

if ($('#element').isEmpty())
    console.log("He's dead, Jim.");
于 2012-04-16T08:31:23.313 に答える
1

0JavaScriptでは「偽物」です。

戻ることができます!$(a).length

于 2012-04-15T21:07:53.433 に答える
0

どうですか:

if ( !$(a)[0] ) {
    // $(a) is empty
}

したがって、$(a)[0]jQuery オブジェクトの最初の要素を取得します。その要素が null または未定義の場合、jQuery オブジェクトが空であることを意味します。

于 2012-04-15T21:10:25.027 に答える