2012-02-22 80 views
1

假設我有一段很長的段落。當我點擊一行時,JS/jQuery將在此特定行的開始處添加一個空的<span>標記 - 就在此行的第一個單詞之前。用JavaScript查找段落中的字數

f.e:這是我的一段話:

<p> 
It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has. 
</p> 

當我點擊第二線,<span>標籤將在第二行第一個字前插入。

任何想法如何做到這一點?

+0

那麼由容器元素應用的包裝確定一條線? – 2012-02-22 11:28:29

+1

除非你使用強硬的換行符('
'),我認爲你不能這樣做。 – 2012-02-22 11:32:03

回答

2

jQuery無法檢測到包裝線出現的位置,除非它發生在硬編碼中斷(<br />或類似的位置)。

這就是說,有一個選擇,雖然它有點哈克。

  1. 複製容器
  2. 給它的-3000一個left(以使其不可見,而無需使用display:none因爲這樣可以給它0高度)
  3. 逐個卸下一個字(使用.lastIndexOf(' ')),並測量每次的高度。當調整大小,以最小的非零的高度,這就是你要插入<span>,這樣的話...
  4. .substring()你剛發現的位置 - .substring(0, position) + '<span>' + .substring(position)
+0

好主意,謝謝。 但是性能呢?考慮到段落可能會很長,如果我需要在每次點擊時傳遞段落中的每個單詞,用戶觸發它可能很重。 – dsternlicht 2012-02-22 12:20:19

+0

@fastrd先比較'p'的'.length',看看如果它改變了 - 如果不是,重新運行它是沒有意義的。你也可以從第一段開始,把這些單詞放到一個新的段落中,看看它何時增長(這將表明你的新行)。這樣,你只會走過第一條線。克隆原稿,將其內容留空並將其發送到屏幕外,然後添加原始段落中的文字。 – Joe 2012-02-22 12:24:16