Autor | Zpráva | ||
---|---|---|---|
deader Profil |
#1 · Zasláno: 26. 11. 2011, 16:02:07 · Upravil/a: deader
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. |
||
Časová prodleva: 5 dní
|
|||
peta Profil |
#2 · Zasláno: 1. 12. 2011, 15:21:42
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 |
#3 · Zasláno: 1. 12. 2011, 19:22:34 · Upravil/a: deader
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 |
#4 · Zasláno: 2. 12. 2011, 19:07:04 · Upravil/a: deader
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 |
#5 · Zasláno: 2. 12. 2011, 20:15:23 · Upravil/a: deader
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.
|
||
Časová prodleva: 12 let
|
0