【问题标题】:jquery: if ul is emptyjquery:如果 ul 为空
【发布时间】:2011-11-07 00:24:55
【问题描述】:

好的,我有一个 jQuery 对话框,里面有一个表单,我正在努力解决这个问题......让我们看看我是否可以用语言表达我想要做的事情......

我有 3 个文本框。 #apInterest#apPayment#apPrincipal 的确切顺序。

我正在尝试做的基本英语术语:

如果.val 小于0 或大于99.99,则在#apInterest 中键入keyup 会触发错误。否则检查ul#mylist 是否有li,如果没有.hide

如果.val 小于0,则在#apPayment 中键入keyup 会触发错误,否则请检查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 个文本框都有一个与此类似的功能,但我尝试过的所有方法似乎都不起作用..有关如何完成此功能的任何想法

【问题讨论】:

标签: jquery jquery-ui-dialog html-lists


【解决方案1】:
if ($('#mylist li').length == 0) ...

【讨论】:

  • 这是贾斯汀的一个常见且易于理解的错误。 $("#mylist :not(:contains(li))") 永远不会为空;它总是会产生一个 jQuery 对象,即使选择器什么都不匹配。像这样测试对象的长度是要走的路。
  • 你最好像这样比较 $('#mylist li').length === 0
【解决方案2】:

我喜欢使用children() 方法,因为它读起来很好,即使你已经为你的ul 缓存了选择器,它也能工作。这是它的样子:

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

【讨论】:

    【解决方案3】:

    jQuery 总是返回一个元素数组。如果未找到匹配项,则数组将为空。 Javascript 中的空数组计算结果为 true:

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

    您要检查返回集的长度:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      • 2022-01-07
      • 2012-05-08
      • 2011-08-21
      • 2014-01-21
      相关资源
      最近更新 更多