Autor | Zpráva | ||
---|---|---|---|
Pan X Profil |
#1 · Zasláno: 19. 8. 2009, 20:55:30
Zdravím, narazil jsem na problém s selectionStart a selectionEnd u divu s contenteditable.
Potřebuji u tohoto divu docílit stejného efektu vkládání bb kódů jako zde v diskusi, ale místo textarea použít div s contenteditable. Všechno funguje ok, akorát mi to označený text vkládá nazačátek. HTML <a href="#" onClick="html('b');">Tučně</a> <div contenteditable="true" id="obsah">Obsah, který je možné přímo upravovat</div> JavaScript var obsah; var startTag; var endTag; var inlineText; function view(id){ var obsah = document.getElementById(id).innerHTML; alert(obsah); } document.getElementById("obsah").onmouseup = function() { oznacenyText = getDocumentSelection(); if(oznacenyText=="") { oznacenyText = getTextareaSelection(); } if(oznacenyText!="") { html(tag) } } function getDocumentSelection() { if(window.getSelection) selection = window.getSelection(); else if (document.getSelection) selection = document.getSelection(); else if(document.selection) selection = document.selection.createRange().text; else selection = ''; return selection; } function getTextareaSelection() { var textarea = document.getElementById("obsah"); if (typeof textarea.selectionStart != 'undefined') { //vse mimo IE var selection = textarea.value.substring(textarea.selectionStart, textarea.selectionEnd); } else if (typeof document.selection != 'undefined') { //IE var selection = document.selection.createRange().text; } else { //alert('Bug!'); } return selection; } function html(tag){ var startTag = '<' + tag + '>'; var endTag = '</' + tag + '>'; var inlineText = startTag + oznacenyText + endTag; alert(inlineText); var textarea = document.getElementById('obsah').innerHTML; var start = textarea.selectionStart; var end = textarea.selectionEnd; var text = textarea.substr(0, start) + inlineText + textarea.substr(end); alert(text); } Problém bude nejspíše u proměnné start neboť nejde vypsat Ukázka, pokud si vyberete část textu a kliknete na tučně tak první alert zobrazí obalený text a ten druhý by měl jak o bude vypadat celé, ale to nejde, vkládá to označený text na začátek a já potřebuji aby nahradil stávající text aby výsledek byl místo „<b>test</b>Testuji test testu“ bylo „Testuji <b>test</b> testu“ Prosím šikovnější javascriptaře o radu. Předem díky Pan X |
||
_es Profil |
#2 · Zasláno: 19. 8. 2009, 21:11:34
Pan X
Tam niekde asi bude chyba: var textarea = document.getElementById('obsah').innerHTML; var start = textarea.selectionStart; var end = textarea.selectionEnd; |
||
Pan X Profil |
#3 · Zasláno: 20. 8. 2009, 19:16:50
_es:
I když to innerHTML smažu tak to stále nejde Zkoušel jsem to nahradit i value ale také nejde |
||
_es Profil |
#4 · Zasláno: 20. 8. 2009, 19:44:17 · Upravil/a: _es
Pan X
Myslím, že na ten <div> treba použiť úplne iné metódy na získanie vybratého textu, než na element textarea. |
||
Časová prodleva: 15 let
|
0