2010-07-29 2 views
5

Я хочу вставить элемент (span, div и т. Д.) В положение, определяемое выбором пользователем текста в документе.Как вставить элемент в выбранную позицию в документе HTML?

Мне удалось получить элемент, на котором сделан выбор. Но я не могу получить точную позицию, где сделан выбор.

Например:

<span>this is testing string for testing purpose</span> 

В этом, предположим, что пользователь выбрал 2-й 'тестирования' слово. Я хочу, чтобы он был заменен, как

<span>this is testing string for <b>testing</b> purpose</span> 

Как это сделать?

BTW: Я знаю, что это возможно. Google Wave делает это. Я просто не знаю, как это сделать.

ответ

4

Это сделает работу:

function replaceSelectionWithNode(node) { 
    var range, html; 
    if (window.getSelection && window.getSelection().getRangeAt) { 
     range = window.getSelection().getRangeAt(0); 
     range.deleteContents(); 
     range.insertNode(node); 
    } else if (document.selection && document.selection.createRange) { 
     range = document.selection.createRange(); 
     html = (node.nodeType == 3) ? node.data : node.outerHTML; 
     range.pasteHTML(html); 
    } 
} 

var el = document.createElement("b"); 
el.appendChild(document.createTextNode("testing")); 
replaceSelectionWithNode(el); 
+0

Работает ли document.selection и windows.getSelection() во всех браузерах? – Rajesh

+0

Да, он работает во всех основных браузерах, выпущенных за последние несколько лет. Я думаю, что это может не сработать в Safari до версии 3, но если это проблема для вас, есть временное решение для более раннего Safari, которое я могу предоставить. –

+0

спасибо. Он работал в FF3.6, Crome, IE8, Opera 10.6 – Rajesh

0

Метод извлечения текущего выделенного текста отличается от одного браузера к другому. Несколько плагинов jQuery предлагают кросс-платформенные решения.

(также см http://api.jquery.com/select/)

+0

http://api.jquery.com/select/says: «Событие select отправляется элементу, когда пользователь делает внутри него текст. Это событие ограничено полями и