【问题标题】:Check if any element has 0 height检查是否有任何元素的高度为 0
【发布时间】:2014-02-15 03:36:28
【问题描述】:

我有一组元素:

<ul>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>

还有一个函数

function heightCheck(){
  $('ul li').each(function(){
    if($(this).height == 0){
      heightCheck();
    }else{
      nextFunction();
    }
  })
}

基本上我希望它继续检查“li”元素的高度,直到所有元素的高度都大于 0。就像现在一样,如果第一个元素是好的,它会触发 nextFunction ,但其余的不是。在继续之前,我需要所有元素都有高度。

【问题讨论】:

  • 如果元素 height 为 0,则您将作为递归结束...
  • 什么会导致li的高度发生变化?
  • li 的高度不会 0 即使它是空的
  • @TusharGupta 为什么会这样? jsfiddle.net/MuXC5
  • @Musa 正在加载一些东西,图像,视频或任何东西。

标签: jquery css function height


【解决方案1】:

您应该使用间隔,而不是递归调用函数。似乎您正在等待一些异步调用来填充列表项。您可以检查所有这些何时完成(可能是更好的选择)或使用间隔进行检查:

var heightInterval;
function nextFunction () {
    clearInterval(heightInterval);
    // etc.
}
heightInterval = setInterval(function () {
    var done = true;
    $('ul li').each(function(){
        if($(this).height() == 0){
            done = false;
            return false;
        }
    })
    if (done) {
        nextFunction();
    }
// check each second
}, 1000);

【讨论】:

    【解决方案2】:

    我相信无论什么

    function heightCheck(){
      var checkHeight = false;
      for(var i =0; i > elements.height; i++){
         checkHeight = checkHeight ||(elements.eq(i).height == 0);
    
         if(checkHeight) break;   
      }
      if(checkHeight)
         heightCheck();
       }else{
         nextFunction();
       }
     }
    

    【讨论】:

      【解决方案3】:

      你可以这样使用:

      function heightCheck(){
        var heightError = 0;
        $('ul li').each(function(){
          if($(this).height == 0){
            heightError = 1;
            heightCheck();
          }
        });
      
        if(heightError == 0){
          nextFunction();
        }
      }
      

      我使用了 var heightError 来验证

      【讨论】:

        猜你喜欢
        • 2015-06-10
        • 1970-01-01
        • 2013-12-16
        • 2013-06-07
        • 2011-01-10
        • 2021-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多