web-dev-qa-db-ja.com

クラスなしで特定の要素を取得するjQuery:notおよびhasClass()での使用方法

次のコード行があります。

$('#sitesAccordion .groupOfSites').click(function() {
    var lastOpenSite = $(this).siblings().hasClass(':not(.closedTab)');
    console.log(lastOpenSite);
});

他の要素の1つを取得するのではなく、「false」を取得します(1つが存在することを前提としていますが、存在する必要があります)。私は問題があると思います:

.hasClass(':not(.closedTab)');

何が問題ですか?

私の目的は(jQuery UIを使用せずに)自分のアコーディオンを作成することです

そして、私はそれを次のように書き込もうとしています:

$('#sitesAccordion .groupOfSites').click(function() {

    //Get the last opened tab
    var lastOpenSite = $(this).siblings().hasClass(':not(.closedTab)');

    //Close last opened tab and add class
    lastOpenSite.hide().toggleClass('closedTab');

    //Open the current Tab
    $(this).children('.accordionContent').toggle('fast');

    // remove class from open tab
    $(this).toggleClass('closedTab');


});

これが最善の方法ですか?ありがとう、アロン

67
Alon

代わりに not 関数を使用してください。

var lastOpenSite = $(this).siblings().not('.closedTab');

hasClassは、要素にクラスがあるかどうかのみをテストします。notは、指定されたセレクターに一致する選択セットから要素を削除します。

108
Dennis

このようにするのははるかに簡単です:

if(!$('#foo').hasClass('bar')) { 
  ...
}

!基準の前にあるというのはfalseを意味し、ほとんどのプログラミング言語で機能します。

88
Qar

jQueryのhasClass()メソッドは、要素ではなくブール値(true/false)を返します。また、それに与えられるパラメーターはクラス名であり、セレクターそのものではありません。

例:x.hasClass('error');

7
techfoobar

jQuery-is(selector)Method を使用することもできます:

var lastOpenSite = $(this).siblings().is(':not(.closedTab)');
3
Sampat Badhe

元の投稿の時点でこれが真実であったかどうかはわかりませんが、兄弟メソッドではセレクターが許可されているため、リストされているOPの動作を減らす必要があります。

 $(this).siblings(':not(.closedTab)');
2
devRyan