【问题标题】:While Loop doesn't work properly - it's skipping sometimes虽然循环不能正常工作 - 它有时会跳过
【发布时间】:2012-08-12 17:16:03
【问题描述】:

简单的 while 循环无法正常工作。 我编写了一个脚本来将文本限制为 3 行。这很简单。我检查元素(div)的高度是否高于 3 行(硬编码的字体大小和行高),如果是,我删除最后一个单词并添加省略号。我正在这样做,而字符串很快就可以放在 3 行上。

它随机工作,有时有效,有时无效。如果不工作,我在第 4 行只有 1 个字。所以它只跳过最后一次迭代,而不是每次都跳过。

$('div.prod-description').each(function(){
    var obj = $(this);

    if(obj.height() > 60) { // line-height: 18px;
        var ellipses = '...';
        var new_text = null;
        while(obj.height() > 60) {
            new_text = obj.text().slice(0, obj.text().lastIndexOf(' '));
            obj.text(new_text+ellipses);
        }
    }
});

我尝试删除if statement,我尝试使用do while statement,但它是一样的。

编辑:我发现了问题!但不知道如何解决。如果我在浏览器的地址栏上按 Enter,或者我从菜单进入页面,它就可以正常工作。如果我用F5 刷新它会跳过最后一次迭代。有什么想法吗?

【问题讨论】:

  • 你知道你可以用 css 做到这一点。 div { overflow: hidden; height: 60px; text-overflow: ellipsis; white-space: nowrap; }
  • 它确实按预期工作(至少在 while 部分),我看到你的问题是它有 3 行,结果有时有 4 行,这很奇怪。
  • 如何在多行文本中使用text-overflow: ellipsis?它应该是跨浏览器的。

标签: javascript jquery while-loop


【解决方案1】:

在我幸运地发现脚本仅在使用 F5 刷新页面时无法正常工作后,我找到了解决方案。 https://stackoverflow.com/a/8310308/1333512

要纠正这个问题,请使用:

$(window).load(function() {});

输出而不是:

$(document).ready(function() {});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    相关资源
    最近更新 更多