2010-12-07 3 views
0

디자인 모드에서 IE8에서 iframe 내부의 텍스트에 대해 캐럿 위치를 얻으려고합니다. 코드는 작동하지만 긴 텍스트의 경우 모든 텍스트를 선택하고 한 번에 한 문자 씩 범위의 끝을 이동하기 때문에 심하게 그리고 추한 수행합니다.IE : designMode의 iframe에서 캐럿 위치를 빠르게 가져올 수 있습니까?

IE에서 현재 캐럿 위치를 얻는 더 빠르고 우아한 방법이 있는지 궁금합니다.

var r = doc.selection.createRange(); 
r.collapse(false); 
doc.execCommand("SelectAll") //this is ugly.. 
var r2 = doc.selection.createRange(); 
r2.select(); 
//..and this is slow 
while (r.compareEndPoints("EndToEnd", r2) < 0) { 
    r2.moveEnd("character", -1) 
    r2.select(); 
} 
pos = r2.text.length; 
+0

이것은 내가 과거에 어떻게했는지 보여줍니다. 죄송합니다. 텍스트 편집은 악몽입니다. – mwilcox

+0

@mwilcox : 나는 악몽을 적게하기 위해 많은 노력을 기울였습니다. 내 대답을 보라. –

답변

3

예, 당신은 당신에게 DOM Level 2 Range 인터페이스를 사용하여 모든 브라우저에서이 일을 하나의 방법을 제공 내 Rangy 라이브러리를 사용할 수 있습니다 여기에 내 현재 코드입니다. 다음은 당신이 iframe 대응의 window 객체가 iframeWin라는 변수에 저장 한 가정

var sel = rangy.getSelection(iframeWin); 
if (sel.rangeCount > 0) { 
    var selectedRange = sel.getRangeAt(0); 
    alert(selectedRange.toString()); 
} 

돌아 다니기에 알맞은는 적어도, 더 정교하고 더 빨리 (긴 문서입니다에서 DOM 범위 객체로 IE의 TextRange 개체를 변환하는 데 사용하는 프로세스) 당신이 이미 가지고있는 것보다. 관심이 있으시면 관련 코드가이 파일의 맨 위에 있습니다. http://code.google.com/p/rangy/source/browse/trunk/src/js/core/wrappedrange.js

+0

정말 멋집니다. 이 문제를 즉시 해결할 수 있습니다. 감사. – rodbv

+0

굉장한 팀. 내가 그 일을 다시해야 할 필요가 있다면 나는 이것을 반드시 확인해야 할 것이다. – mwilcox

관련 문제