2011-12-01 2 views
0

여기에 우리가 다시 간다. 나는 IE 충돌에서 createRange() 사용

내가 코드를 가지고 ...이 문제에 대한 해결책을 하루 종일 찾아 봤는데 :

var formatString = function(t,style){ 
    var el = $(t); 
    var pre; 
    var start; 
    var end; 
    var len; 
    var replace; 
    switch(style){ 
     case 'italic': 
      pre = '[em]'; 
      break; 
     case 'bold': 
      pre = '[b]'; 
      break; 
     case 'paragraph': 
      pre = '[p]'; 
      break; 
    } 

    if(document.selection){ 
     el.focus(); 
     var sel = document.selection.createRange(); 
     // Finally replace the value of the selected text with this new replacement one 
     sel.text = pre + sel.text + pre.replace(/(\[)/,'[/'); 
    } else { 
     len = el.val().length; 
     start = t.selectionStart; 
     end = t.selectionEnd; 
     sel = el.val().substring(start, end); 
     replace = pre + sel + pre.replace(/(\[)/,'[/'); 
     el.val(el.val().substring(0,start) + replace + el.val().substring(end,len)); 
    } 

} 

내가 그냥 텍스트에 일부 형식화하는 추가하는 간단한 WYSIWYG을 만드는 일을 해요 분명히 올바른 html 태그를 표시하도록 처리됩니다. 모두 IE를 제외한 모든 브라우저에서 잘 작동합니다.

사랑하는 IE가 텍스트 영역 바깥을 클릭했을 때 선택된 텍스트를 선택 취소하는 문제가 있습니다. 그리고 이로 인해 sel.text 객체에 텍스트가 표시되지 않습니다.

나는 다음과 같은 기능을 실행 :이 다른 스레드가 그냥 저를 인도 같은 경우

<button onclick="formatString($('#textid')[0],'italic')">Italic</button> 

버튼 다른 브라우저 출력을

'the italic text' // output the [em]italic[/em] text - when italic is selected 
IE output 'the [em][/em]italic text' 

을 클릭하면, 말 그대로 내가 가지고있는 200 개 이상의 스레드를 읽었으며이 문제를 지적하지 않았습니다.

답변

0

아무도 대답이 없기 때문에 연구를 확장하고 100 개의 스레드를 더 읽었습니다. 농담입니다. IE는 텍스트 영역시에서 초점을 잃고 어떤 이유로 모두 여기 stackoverflow.com에서

Why getting a text selection from textarea works when a button clicked but not when a "div" clicked (Internet Explorer)

How to prevent buttons to submit a form.

,

:

나는 다음과 같은 스레드에서 답을 발견 단추 이외의 요소를 클릭하면 내 경우에는 CSS가있는 단추처럼 보입니다. 그러나 문제는 버튼을 클릭하여 양식을 제출하고 그 일이 발생하기를 원하지 않는다는 것입니다. 이것이 내가 스팬을 마스킹하도록 선택한 이유입니다. 다음과 같은 함수가 예외 양식을 어떤 방식으로 제출 발생하는 경우이 솔루션을

<button onclick="formatString($('#textid')[0].'italic'); return false">Italic</button> 

유일한 문제가있다 :

내가 대신과의 onclick에서 버튼 태그를 사용하는 IE의 동작은 추가 속성 때문에

. 그래서 예외를 피하기 위해 코드를 약간 변경해야합니다. 나쁜 코드 습관. 코드를 디버그하기 어렵게 만듭니다.

마지막 스레드가 연결된 더 자세한 정보.