Autor Zpráva
deader
Profil
Zdravím,
potřeboval bych poradit, jak mám zjistit pozici kurzoru na stránce s designMode=on. Našel jsem spousty návodů, ale vždy jsem jen získal pozici od začátku řádku, jenže já bych potřeboval pozici v počtu znaků od začátku stránky(jako je selectionStart v textarea).
Děkuji za rady.
peta
Profil
Proc?
Editory funguji tak, ze maji seznam objektu v nem a pozici. Uzivatel edituje do pruhledneho divu a pod nim je jeste jeden, kam se to uklada. Html pozice v kodu se nesleduje, k cemu taky.
Resil bych to tak, ze:
A = [edit].html // cely html kod
B = [oznaceno.start, edit.end].html //zacatek oznaceneho po konec celeho
C = [edit.start, oznaceno.end].html //zacatek celeho az po konec oznaceneho
start = stripHTML(A).length - stripHTML(B).length
end = stripHTML(A).length - stripHTML(C).length
Urcite lze nastavit kurzor pro oznaceni na zacatek nebo konec.
deader
Profil
Děkuji za odpověď.
Vytvářím online editor pro PHP/JS/HTML se zvýrazněním syntaxe. Nechci používat existující knihovny, protože jednak jsou velmi objemné a jednak mám speciální požadavky.
Uvedu příklad, kde nastal problém:
máme text:<red>nějaký červený tag</red>  text  text  text 
 text  text <red>nějaký červený tag</red> text  text  text 

nyní uživatel umístí uvozovky ":
máme text:<red>nějaký červený tag</red>  text  text  text 
 text"  text <red>nějaký červený tag</red> text  text  text 

a výsledkem by mělo být:
máme text:<red>nějaký červený tag</red>  text  text  text 
 text<blue>"  modrý text nějaký již nečervený tag text text modrý text 

Doufám, že je to dost srozumitelné :)
Hledám ted nějaké vhodné řešení a napadlo mě:
- buď projet všechny node od kurzoru do konce, jejich obsah přidávat do řetězce a ten pak poslat do zvýrazňovací funkce
- nebo veškerý obsah dávat do tagů s id(např: <text id=1>nějaký text</text><red id=2>červený</red> a pak si z getSelection().parentNode.id vzít id a pomocí innerHTML.indexOf najít <tag id=x> a tím bych získal požadovanou pozici. Pak innerHTML.substr od té pozice přes stripHTML do zvýrazňovací funkce.
Napadá Vás nějaké efektivnější řešení?
A můžete mi prosím podrobnějíi vysvětlit(nebo odkázat), jak funguje nebo jak by mě pomohl ten průhledný div?
Ještě jednou moc děkuji za odpovědi.
deader
Profil
Ještě nastal další problém, při změně innerHTML dojde ke zrušení označení/pozice kurzoru a zatím jsem nenašel způsob, jak pozici určit.
Každopádně všiml jsem si, že třeba v Dokumentech Google je označení i kurzor simulován jen html tagy.
Pořád ale nechápu, jak by to fungovalo s tím průhledným divem?
deader
Profil
Už to mám! Průhledný div by mě nepomohl, ale textarea s průhledným textem(color:transparent) už ano! Uživatel píše do textarea a její obsah se pak zpracovává do obyčejného divu, který je pod ní. V textarea jednoduše můžu zjistit i nastavit pozici označení, kurzoru i aktuální řádek.

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:

0