次のコード行があります。
$('#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');
});
これが最善の方法ですか?ありがとう、アロン
代わりに not
関数を使用してください。
var lastOpenSite = $(this).siblings().not('.closedTab');
hasClass
は、要素にクラスがあるかどうかのみをテストします。not
は、指定されたセレクターに一致する選択セットから要素を削除します。
このようにするのははるかに簡単です:
if(!$('#foo').hasClass('bar')) {
...
}
!基準の前にあるというのはfalseを意味し、ほとんどのプログラミング言語で機能します。
jQueryのhasClass()
メソッドは、要素ではなくブール値(true/false)を返します。また、それに与えられるパラメーターはクラス名であり、セレクターそのものではありません。
例:x.hasClass('error');
jQuery-is(selector)Method を使用することもできます:
var lastOpenSite = $(this).siblings().is(':not(.closedTab)');
元の投稿の時点でこれが真実であったかどうかはわかりませんが、兄弟メソッドではセレクターが許可されているため、リストされているOPの動作を減らす必要があります。
$(this).siblings(':not(.closedTab)');