Range 객체는 문서에서 선택된 영역의 데이터를 추출하거나 조작할 때 사용하는 객체입니다. 인터넷 익스플로러를 제외한 대부분의 브라우저는 DOM Level2에 정의된 Range 스펙을 따르고 있습니다. DOM은 표준 스펙이지만, IE TextRange의 pasteHTML 메소드를 사용할 수 없다는 점은 아쉬운 부분입니다. 예를 들어, IE에서는 다음과 같이 선택 영역의 텍스트를 치환하거나 새로운 텍스트를 삽입할 수 있었습니다.
var sel = document.selection;
if (sel) {
var rng = sel.createRange();
if (!rng) rng.pasteHTML("<strong>Hello, <em>World!</em></strong>");
}
[adsense]
이 기능을 DOM Level2의 Range 객체를 사용하면 다음과 같이 구현할 수 있습니다.
var sel = document.getSelection();
if (sel.rangeCount) {
var rng = sel.getRangeAt(0);
var frag =document.createDocumentFragment();
var div = document.createElement("div");
div.innerHTML = "<strong>Hello, <em>World!</em></strong>";
while(div.firstChild) {
frag.appendChild(div.firstChild);
}
rng.deleteContents();
rng.insertNode(frag);
}
이 코드는 파이어폭스, 구글 크롬, 오페라 브라우저에서 정상적으로 동작하는 것을 확인했습니다.
행복한고니의 생각...
DOM Level2 Range를 사용한 pasteHTML 구현...
좋은 정보 감사합니다
아차, 본문에 오류가 있습니다
createDocumentFragment 함수 이름이 잘못됬습니다
감사합니다. 수정했습니다. ^^
ㄷ 코멘트 삭제 기능이 없네요. 글이 안올라가서 새로 썼더니 저 모양이 되었습니닫