jQuery .每个函数创建无限循环

jQuery .each function creating infinite loop?

本文关键字:创建 无限循环 函数 jQuery      更新时间:2023-09-26

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

  1. 页面加载未完成。
  2. 它"锁定",Chrome被迫杀死违规页面。
  3. 控制台不刷新,所以我无法读取错误。

我想解决的问题是有一些文本元素有时太宽,但调整所有文本的大小会使其中一些真的很小。

我的解决方案是去每个标题('.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。

由于h1是块元素,无论font-size如何,它都将取容器的宽度,除非指定。这意味着如果while循环至少迭代一次,则它永远不会为false。

如果你想让h1占用内容宽度,你需要将其设置在display inline-block中,浮动它或通过绝对定位将它从框中取出。

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

部分代码已修改

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

问题实际上是您在重复循环中调整字体大小直到合适为止。Javascript不能直接从样式表中提取font-size值,因此每次while循环运行时,它都会花费大量时间来解析样式表。