jQuery .each函数创建无限循环?

时间:2014-05-13 20:32:32

标签: javascript jquery html css

我认为我的代码正在创建一个无限循环。

  1. 页面永远不会完成加载。
  2. 它“锁定”,Chrome被迫杀死有问题的页面。
  3. 控制台无法刷新,因此无法读取错误。
  4. 我试图解决的问题是有些文本元素有时太宽,但调整所有文本的大小会使其中的一些非常小。

    我的解决方案是转到每个标头('.mftitle h1')并将其与容器('.ut-one-third')进行比较,该容器始终是可接受的宽度。如果标题比容器宽,那么它会缩小字体大小,直到它不是。

    jQuery( document ).ready(function() {
    
      jQuery('.mftitle h1').each(function() {
    
        var container = jQuery(this).closest('.ut-one-third');
    
        while( jQuery(this).width() > jQuery(container).width() ) {
    
          jQuery(this).css('font-size', (parseInt(jQuery(this).css('font-size')) - 1) + "px" );
    
        }
    
      });
    
    });
    

    感谢您的帮助!我很难过。如果这是一个糟糕的解决方案,我会道歉,我正在自学jQuery。

3 个答案:

答案 0 :(得分:5)

由于h1是一个块元素,因此无论字体大小如何,它都会占用容器的宽度,除非指定。这意味着如果迭代至少一次,while循环将永远不会为假。

如果您希望h1获取内容宽度,则需要将其设置为显示内联块,浮动它或通过绝对定位将其从包装中取出。

这是一个例子:http://jsfiddle.net/fWtwL/

某些代码已被修改。

答案 1 :(得分:0)

如果更改字体大小不会使h1的宽度小于容器的宽度,则while循环可以是/将是无限循环。尝试while (jQuery(this).width() > jQuery(container).width() && parseInt(jQuery(this).css('font-size')) > 8)或类似的东西......

答案 2 :(得分:-1)

问题实际上是你在重复循环上调整字体大小直到它适合。 Javascript无法直接从样式表中提取字体大小值,因此每次while循环运行时都会花费大量时间尝试解析样式表。