web-dev-qa-db-ja.com

jquery:ulが空の場合

わかりました、フォームが含まれているjQueryダイアログボックスがあり、これを理解しようとしていますが...

3つのテキストボックスがあります。 #apInterest#apPayment#apPrincipalをこの順序で並べます。

私がやろうとしていることの基本的な英語の用語:

#apInterestのキーアップ時に、.valが0未満または99.99より大きい場合、エラーが発生します。それ以外の場合は、ul#mylistliがあるかどうか、ない場合は.hide

#apPaymentでのキーアップ時に、.valが0未満の場合はエラーが発生し、そうでない場合はリストでliを確認します。

#apPrincipal#apPaymentとまったく同じです

私が今持っているもの

$('#apInterest').live("keyup", function(e) {
var parent = $('.inter').parents("ul:first");
if ($('#apInterest').val() < 0 || $('#apInterest').val() > 99.99) {
    $('.inter').remove();
    $('#mylist').append('<li class="inter">Interest Rate cannot be below 0 or above 99.99</li>');
    $('#popuperrors').show();
    $(this).addClass('error');
} else {
    $(this).removeClass('error');
    $('.inter').remove();
    alert(parent.children().text);
    if (parent.children().length == 0){
        $('#popuperrors').hide();
    }
}
});

私も試しましたが

if ($("#mylist :not(:contains(li))") ){
$('#popuperrors').hide();
}

私は3つのテキストボックスすべてにこれと同様の機能を備えていましたが、私が試したものはどれも機能しないようです。これを完了する方法に関するアイデア

22
Justin
if ($('#mylist li').length == 0) ...
65
Wulf

私はchildren()メソッドを使用するのが好きです。これは、うまく読み取れ、ulのセレクターをすでにキャッシュしている場合でも機能するためです。これは次のようになります。

$myList = $('#myList')
if ( $myList.children().length === 0 ) ...
7
SimplGy

jQueryは常に要素の配列を返します。一致が見つからなかった場合、配列は空になります。 JavaScriptの空の配列はtrueと評価されます。

console.log( !![] ); // logs: true

返されたセットの長さを確認したい場合:

if ( ! $("#mylist li").length ){
   $('#popuperrors').hide();
}
3
Joseph Silber