2010-03-29 34 views
2

我正在做一些瀏覽器編輯,並且我有一些內容大約20k字符長的文本<textarea>。關於修剪DOM對象中大量文本的建議

所以它看起來是這樣的:

<textarea> 
Text 1 
Text 2 

Text 3 
Text 4 
[...] 
Text 20,000 
</textarea> 

我想使用jquery當有人點擊一個按鈕,砍來修剪下來,但我無法這樣做沒有超載的瀏覽器。假設我知道字符數是16,510 - 17,888,我想要做的是修剪它。

使用:

​​

但瀏覽器似乎很喜歡我這樣做的時候崩潰。備擇方案?

編輯

從註釋解決方法:

var removeTextNode = document.getElementById('textarea').firstChild; 
removeTextNode.splitText(indexOfCharacterToRemoveEverythingBefore); 
removeTextNode.parentNode.removeChild(removeTextNode); 

回答

2

不知道關於jQuery的,但與普通的香草的Javascript,這可以通過使用textNode對象的splitText()方法來實現。您的<pre>有一個textNode孩子,其中包含其中的所有文本。 (您可以從childNodes集合中獲取它。)將其拆分爲所需的索引,然後使用removeChild()刪除不需要的部分。

+0

非常有趣! 其實,我犯了一個錯誤以上 - 這是一個textarea ...這仍然工作? – aronchick 2010-03-29 06:10:05

+0

工作完美!向問題添加代碼。 – aronchick 2010-03-29 06:31:51

+1

順便說一句,您的最後一行可以簡化以保存一個doc ID查找:removeTextNode.parentNode.removeChild(removeTextNode) – levik 2010-03-29 20:27:42

1

你測試的是什麼瀏覽器?

substr採用起始索引和可選長度。如果長度被省略,則它提取到字符串的末尾。 substring將字符串的開始和結束索引提取出來,我認爲這可能是一個更好的選擇,因爲您已經有了這些選項。

我使用Lewis Carroll的書Alice's Adventures in Wonderland創建了一個小example at fiddle。這本書大約有160,000個字符,你可以嘗試各種開始/結束索引,看它是否會使瀏覽器崩潰。似乎在我的Chrome,Firefox和Safari上正常工作。不幸的是我沒有訪問IE。這裏是一個的使用功能:

function chop(start, end) { 
    var trimmedText = $('#preId').html().substring(start, end); 
    $('textarea').val(trimmedText); 
} 
​ 
+0

非常徹底和快速的答案!我使用的是FF 3.6 - 讓我試試你正在做的事情,看看我能否重現。每次我這樣做,它都會將瀏覽器清空。 – aronchick 2010-03-29 04:28:24

+0

謝謝。某處出現無限循環可能導致瀏覽器崩潰,或者在單擊修剪時觸發某些其他處理。 – Anurag 2010-03-29 05:08:17