2012-08-16 98 views
2

簡單的while循環無法正常工作。 我寫了一個限制文本爲3行的腳本。這很簡單。我檢查元素(div)的高度是否高於3行(硬編碼的字體大小和行高),如果是,我刪除最後一個單詞並添加省略號。而我正在做這件事,而字符串很快就足以適應3條線。雖然循環無法正常工作 - 它有時會跳過

它是隨機工作,有時工作,有時不工作。如果不工作,我在第四行只有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,但它是相同的。

編輯:我發現了問題!但不知道如何解決它。如果我在瀏覽器的地址欄中輸入,或者我從菜單中進入頁面,它可以正常工作。如果我使用F5進行刷新,它將跳過上一次迭代。有任何想法嗎?

+4

你知道你可以只用CSS做到這一點。 'div {overflow:hidden;身高:60px;文本溢出:省略號;白色空間:nowrap; }' – elclanrs 2012-08-16 11:03:37

+0

它確實按預期工作(至少是一部分),我看你的問題是用3行代碼,結果有4個,這很奇怪。 – jackJoe 2012-08-16 11:11:28

+0

如何在多行文本上使用'text-overflow:ellipsis'?它應該是跨瀏覽器的。 – enenen 2012-08-16 11:20:25

回答

1

幸運地發現腳本無法正常工作,只能用F5刷新頁面,我找到了解決方案。 https://stackoverflow.com/a/8310308/1333512

要解決此問題,使用:

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

走出來代替:

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