2010-03-29 2 views
2

브라우저 편집 중 일부를 수행 중이며 < 텍스트 영역 >에 약 20k 자 정도의 내용이 있습니다.DOM 객체에서 많은 양의 텍스트를 잘라 내기위한 권장 사항

는 그래서 같은 같습니다

<textarea> 
Text 1 
Text 2 

Text 3 
Text 4 
[...] 
Text 20,000 
</textarea> 
누군가가 절단 할 수있는 버튼을 칠 때 그것을 아래로 트림 jQuery를 사용하고 싶습니다

을,하지만 난 문제가 브라우저를 과부하없이 그 일을하는 데 문제가 있습니다. 캐릭터의 숫자가 16,510 - 17,888이라는 것을 알고 있다고 가정하고, 내가 원하는 것은 트리밍입니다.

jQuery('#textsection').html(jQuery('textarea').html().substr(range.start));

그러나 브라우저 내가이 작업을 수행 할 때 충돌 즐길 수있는 것 : I

사용하여했다. 대안? 코멘트에서

편집

솔루션 :

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

답변

2

이 확실하지,하지만 평범한 자바 스크립트와 함께, 이것은 textNode 개체의 splitText() 방법을 사용하여 수행 할 수 있습니다 : 여기에 사용되는 기능입니다. <pre>에는 내부에있는 모든 텍스트가 포함 된 textNode 하위가 있습니다. (childNodes 컬렉션에서 가져올 수 있습니다.) 원하는 인덱스에서 분할 한 다음 removeChild()을 사용하여 필요하지 않은 부분을 삭제하십시오.

+0

매우 흥미 롭습니다! 사실, 위의 실수를했습니다. 텍스트 영역인데 ... 여전히 작동합니까? – aronchick

+0

완벽하게 일했습니다! 질문에 코드 추가하기. – aronchick

+1

BTW, 마지막 라인을 단순화하여 하나의 doc ID 조회를 저장할 수 있습니다. removeTextNode.parentNode.removeChild (removeTextNode) – levik

1

무슨 브라우저에서 테스트?

substr은 시작 색인과 선택적 길이를 사용합니다. 길이가 생략되면, 문자열의 끝까지 추출됩니다. substring은 추출 할 문자열의 시작 및 끝 인덱스를 취합니다. 이미 사용할 수있는 옵션이 있으므로 더 나은 옵션이라고 생각합니다.

Lewis Carroll이 Alice's Adventures in Wonderland 책을 사용하여 작게 example at fiddle을 만들었습니다. 이 책의 길이는 약 160,000 자이며 다양한 시작/끝 인덱스로 시도하고 브라우저가 충돌하는지 확인할 수 있습니다. Chrome, Firefox 및 Safari에서 정상적으로 작동하는 것 같습니다. 불행히도 IE에 액세스 할 수 없습니다. jQuery를 약

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

매우 철저하고 신속한 답변입니다. 나는 FF 3.6을 사용하고 있습니다. 당신이하고있는 일을 정확하게 시도하고 내가 다시 할 수 있는지 알아 봅시다. 내가 할 때마다, 그것은 브라우저를 백인으로 만듭니다. 덕분에 – aronchick

+0

. 무한 루프가 어딘가에 브라우저를 중단 시키거나 트림을 클릭 할 때 다른 처리가 트리거 될 수 있습니다. – Anurag

관련 문제