Цитата:
<div style="cursor:pointer" onclick = "a(event,this)"> Такие дела, братюня. </div> <script type="text/javascript"> function a(e,t){ var textnode = e.rangeParent, node = textnode.parentNode, fragment = document.createDocumentFragment(); fragment.appendChild( document.createTextNode( textnode.data.slice(0,e.rangeOffset) ) ) fragment.appendChild( document.createElement('b') ).appendChild( document.createTextNode( textnode.data.slice(e.rangeOffset,e.rangeOffset+1) ) ) fragment.appendChild( document.createTextNode( textnode.data.slice(e.rangeOffset+1) ) ) node.replaceChild(fragment, textnode) t.nextSibling.data = t.innerHTML; } </script> но на самом деле это всё делается с помощью Selection и Range: <div contenteditable="true" onmouseup = "a(event,this)"> Такие дела, братюня. </div> <script type="text/javascript"> function a(e,t){ var range = window.getSelection().getRangeAt(0); range.surroundContents(document.createElement('b')); t.nextSibling.data = t.innerHTML; } </script> |
Первый вариант работает только в FF. Но идея ясна, я решил, что мигать контент будет из-за замены(replaceChild).
Второй вариант фейлится в ИЕ, в старом FF(баг). Мой вариант хреновый, но реализуется в 3 строчки на фреймворке типа jQuery и вполне рабочий даже в ИЕ6-7-8, которые некоторые все еще вынуждены поддерживать. |
В осле не работает потому, что в нём совершенно друная реализация selection, и мне лень было писать вариант для него.
Ваш фэйл не в предложенном вами методе(он подходит для случаев с парой слов), а в том что вы отрицали возможность сделать это по-человечески. Любая более-менее серьёзная работа с текстом идёт через selection. |
Часовой пояс GMT +3, время: 14:07. |