2011-05-10 52 views
6

鑑於此:如何將未知長度的文本修剪爲一定數量的行?

<p class="summary">Here is some text, could be 5 words, could be 500 words.</p> 

我抓住該段高度與此代碼:

var pHeight = $('.summary').height(); 

而在我的情況下,如果是大於32,這三條線長(這是太長)。在這種情況下,我想修剪文本並插入「Read More ...」鏈接。問題是,我如何確定在哪裏修剪,以便文本只佔用兩行?如果只有某種方式,我可以採取字符數並乘以每個字母大小的數字。用我認爲相對簡單的等寬空間,但這是我們正在談論的Arial。

任何點在正確的方向將不勝感激,謝謝!

+1

放置字符限制通常比放行限制更好。這在這種情況下不是一種選擇嗎? – Chad 2011-05-10 19:02:21

回答

5

有沒有不錯這樣做的方式有幾個原因。首先,不同的瀏覽器/平臺可能會以不同的方式呈現字體(不過略有不同)。其次,javascript無法提取給定字體(AFAIK)的單個字符大小。

如果我正在實現這樣的事情,我只會有一個最長允許長度的常量和substring它。我也會這樣做服務器端,因爲沒有必要將數據發送到您不打算使用的客戶端。

另一種方法(雖然不是我會使用的一種方法)將把你的文本放在一個具有設置寬度和高度的div中,用overflow: hidden限制任何溢出。當然,這可能會讓你留下部分切斷的單詞,所以我會建議不要這樣做。

+0

用於服務器端子字符串的+1和允許用作剪輯的常量字符串長度。 – robx 2011-05-10 19:10:36

0

我會說使用幾個不同的通用文本塊,看看有多少字符是需要兩條線。平均的結果和圓下來,所以你永遠不會意外地過去。然後用你真實的文字圈出你猜的數字,你的文字應該填滿2行左右。

+0

這對我來說似乎有點貴:P – 2011-05-10 19:06:05

+0

耗時,你的意思是? – 2011-05-10 19:06:58

+0

在客戶端處理方面昂貴。所以是的,費時。 – 2011-05-10 19:11:31

1

如果你的身高太高,你可以簡單地在第三行放置一個帶有白色背景的'p',並在其中添加「Read More ...」。併爲你的'p'添加一個高度和「溢出:隱藏」。

1

我會使用jQuery文本擴展器。有幾個在那裏,但這裏有一個例子:http://plugins.learningjquery.com/expander/切點是基於一個字符計數,但有一些試驗和錯誤,你應該能夠找到一個字符計數,給你兩條線。

1

我一直在處理這些問題一段時間,同時我也清除了一些想法。這在代碼中很貴,但它對我來說很好。 如果你知道西班牙語並且需要一些編碼思想,我現在就引導你,我在my blog中解決了類似的問題。

你知道容器的大小,如果它意味着有兩行,基於lineHeight的文本。所以想象你的容器是Ypx高。汽車及設置最大高度:

  1. 從容器
  2. 將容器溢出獲取所有文字YPX;
  3. 開始通過字加入字你從容器
  4. 檢查抓起文本如果scrollerHeight是少於或等於YPX
  5. 繼續增加的話,直到(4)無效,然後刪除您添加的最後一個字。

正如我所說的,不是很便宜,但我已經做了一些測試,完成它所需的時間是線性的,所以用幾句話就會很快(當您檢查10.000時間它需要不到一秒)

希望它有幫助!

1

我已經寫了一個小的jQuery插件,刪除內容中的單詞,直到元素低於某個高度。 (並且在內容的末尾添加了三個點。)此解決方案與Lomefin相似。與他的解決方案相比,我的一個解決方案針對只需刪除幾個字的情況進行了優化。

該代碼是here

相關問題