Autor Zpráva
Pan X
Profil
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
Pan X
Tam niekde asi bude chyba:
var textarea = document.getElementById('obsah').innerHTML;
var start = textarea.selectionStart;
var end = textarea.selectionEnd;
Pan X
Profil
_es:
I když to innerHTML smažu tak to stále nejde
Zkoušel jsem to nahradit i value ale také nejde
_es
Profil
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.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: