Autor | Zpráva | ||
---|---|---|---|
dan5505 Profil * |
#1 · Zasláno: 27. 8. 2009, 00:39:33
Zdravím,
mám jeden problém. potxeboval bych script co dokáže formátovat text v <textarea> pomocí BBcode značek. Sesmolil jsem tento script: function BBCode(CO) { var doc = document.Tform.bodyTXT; var tagy="["+CO+"][/"+CO+"]"; doc.value += tagy; } ......................... <form name="Tform"> <input type="button" value="B" onClick="BBCode('B')"> <textarea rows="10" cols="50" name="bodyTXT"></textarea> </form> Ten script funguje, jenže já potřebuju aby po tom co vloží BBcode značky předal zaměření textareaře a ktomu jěště aby dal kurzor mezi BBcode značky nebo když uživatel označí text aby dal BBcode na začátek a konec označeného textu. tak jako je to na tomto fóru. Předem děkuji za všechny rady. |
||
pexxxik Profil |
#2 · Zasláno: 27. 8. 2009, 01:32:30
Ahoj, Teď řeším úplně stejný problém jako ty:D a rozhodl jsem se googlit a vše dobře dopadlo;), našel jsem stránku na které je to dostatečné: Odkaz ..... kód jsem si trochu poupravil a je vše podle mých potřeb....
|
||
MCKAY Profil |
#3 · Zasláno: 27. 8. 2009, 08:33:56
pexxik, dan5505: googlit si opravdu nemusel, stačilo se podivat tady v diskusy. Řešilo se to už několikrát. Například zde: http://diskuse.jakpsatweb.cz/index.php?action=vthread&topic=92530&forum=8&page=-1
Předpokládám, že potom určitě budeš chtít i nějaký chytrý převod. Dříve bych to dělal přes str_replace(); ale dnes už bych použil preg_replace(); takže to sem uvedu, pro případ, že by si to potřeboval [ b ] a [ b ] převedeš: $text = $_POST["text"]; // treba, já nevím, jak se to u tebe jmenuje. $text = preg_replace("/\[b\](.*)\[\/b\]/", "<b>$1</b>", $text); A tak podobně. Pokud to víš, tak budiž, poslouží to třeba ostatním.:-) |
||
dan5505 Profil * |
#4 · Zasláno: 27. 8. 2009, 21:51:33
„našel jsem stránku na které je to dostatečné: Odkaz “
jo díky to sem taky našel. ale má to jeden háček. ten script se vztahuje jen na označený text. já potřebuju aby ještě uměl vložit bbcode značky a mezi ně umístil kurzo. „Řešilo se to už několikrát. Například zde: http://diskuse.jakpsatweb.cz/index.php?action=vthread&topic=92530&forum=8&page=-1 “ jo tenhle script funguje. a taky to má háček. Myslel jsem že z výše uvedeného scriptu každý pozná jak jsem na tom s JS. ten script má přes 90 řádků. a navíc používá nějákej zvláštní objektový model. například tohle : document.forms["postMsg"].elements["poslText"]; fakt nevím jak na to ten programátor přišel. já bych to zapsal takhle document.postMsg.poslText; co je to elements ?? nebo typeof. nenašel by se nějákej dobrák co by mi vysvetlil jak ten script pracuje. P.S. pěkný způsob převodu. já to to dělám přez str_replace() |
||
Chamurappi Profil |
#5 · Zasláno: 28. 8. 2009, 01:09:08
Reaguji na dana5505:
„ten script má přes 90 řádků“ Ano, je docela krátký. Jeho novější verze bude mít přes 3000 řádků :-) > například tohle : document.forms["postMsg"].elements["poslText"]; > fakt nevím jak na to ten programátor přišel. já bych to zapsal takhle document.postMsg.poslText; co je to elements ?? To je jen upovídanější varianta, pro někoho může být názornější. Funguje v podstatě stejně jako ten tvůj zápis, až na to, že v kolekci „forms“ jsou jen formuláře a v kolekci „elements“ na formuláři jen ty elementy, které se týkají formuláře. Pro pořádek ještě zmíním, že zápisy objekt["vlastnost"] a objekt.vlastnost jsou ekvivalentní, takže jde používat třeba i document.forms.postMsg.elements.poslText, nebo document["postMsg"]["poslText"]. „nebo typeof“ Viz nápověda u Mozilly. „já to to dělám přez str_replace()“ Jak ošetřuješ situace, kdy ti někdo neuzavře značku? To máš pak neuzavřenou tučnost i v HTML? |
||
_es Profil |
#6 · Zasláno: 28. 8. 2009, 02:30:49
Chamurappi
„zápisy objekt["vlastnost"] a objekt.vlastnost jsou ekvivalentní,“ Nie celkom, prvý zápis je univerzálnejší, ak by bola vlastnosť napríklad "100" alebo "1x", tak druhý zápis sa nedá použiť. |
||
dan5505 Profil |
#7 · Zasláno: 28. 8. 2009, 13:59:14
jo tak já sem asi úplná lama.
myslel jsem že po php bude JS hračka. Ale není. takovejhle script: <html> <head> <title></title> <script type="text/javascript"> <!-- function insertTag(tag, parovy, text, prependText, appendText) { //inicializace proměných var textarea = document.forms["postMsg"].elements["poslText"]; var startTag = '[' + tag + ']'; var endTag = '[/' + tag + ']'; if (typeof text == 'undefined') { var tagText = getTextareaSelection(); } else { var tagText = text; } if (typeof parovy == 'undefined') { var parovy = true; } if (typeof prependText == 'undefined') { var prependText = ''; } if (typeof appendText == 'undefined') { var appendText = ''; } //přepsání výchozích hodnot pro specifické tagy if (tag == 'url') { if (tagText == '') { tagText = 'Odkaz'; } var regexp = new RegExp("^((http|https|ftp)\\://)([a-zA-Z0-9\\.\\-]+(\\:[a-zA-Z0-9\\.&%\\$\\-]+)*@)?((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\\-]+\\.)*[a-zA-Z0-9\\-]+\\.[a-zA-Z]{2,4})(\\:[0-9]+)?(/[^/][a-zA-Z0-9\\.\\,\\?\\'\\\\/\\+&%\\$#\\=~_\\-@]*)*$"); var regexp2 = new RegExp("^([a-zA-Z0-9\\.\\-]+(\\:[a-zA-Z0-9\\.&%\\$\\-]+)*@)?((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|www\\.([a-zA-Z0-9\\-]+\\.)*[a-zA-Z0-9\\-]+\\.[a-zA-Z]{2,4})(\\:[0-9]+)?(/[^/][a-zA-Z0-9\\.\\,\\?\\'\\\\/\\+&%\\$#\\=~_\\-@]*)*$"); if (regexp.test(tagText)) { startTag = '[url=' + tagText + ']'; } else if (regexp2.test(tagText)) { startTag = '[url=http://' + tagText + ']'; } else { startTag = '[url=http://example.com]'; selectionStart = prependText.length + 5; selectionEnd = prependText.length + 23; } } //vytvoření textu pro vložení if (!parovy) { endTag = ''; } var text2insert = prependText + startTag + tagText + endTag + appendText; //vložení: textarea.focus(); if (typeof textarea.selectionStart != 'undefined') { var start = textarea.selectionStart; var end = textarea.selectionEnd; textarea.value = textarea.value.substr(0, start) + text2insert + textarea.value.substr(end); //nastaveni kurzoru na spravné misto / vybrani pozadovaneho textu if (typeof selectionStart != 'undefined' && typeof selectionEnd != 'undefined') { textarea.selectionStart = start + selectionStart; textarea.selectionEnd = start + selectionEnd; } else { if (tagText == '') { //skoceni mezi tagy textarea.selectionStart = start + prependText.length + startTag.length; textarea.selectionEnd = start + prependText.length + startTag.length; } else { //skoceni za posledni tag textarea.selectionStart = start + text2insert.length; textarea.selectionEnd = start + text2insert.length; } } } else if (typeof document.selection != 'undefined') { var range = document.selection.createRange(); range.text = text2insert; //nastaveni kurzoru na spravné misto / vybrani pozadovaneho textu if (typeof selectionStart != 'undefined' && typeof selectionEnd != 'undefined') { range.moveStart('character', -text2insert.length + selectionStart); range.moveEnd('character', -text2insert.length + selectionEnd); } else { if (tagText == '') { //skoceni mezi tagy range.move('character', -(endTag.length + appendText.length)); } else { //skoceni za posledni tag //protoze prohlizec v tomto pripade skoci za posledni tag automaticky, neni treba nic posouvat } } range.select(); } //unset promenych delete selectionStart; delete selectionEnd; } function getTextareaSelection() { var textarea = document.forms["postMsg"].elements["poslText"]; if (typeof textarea.selectionStart != 'undefined') { var selection = textarea.value.substring(textarea.selectionStart, textarea.selectionEnd); } else if (typeof document.selection != 'undefined') { var selection = document.selection.createRange().text; } else { //alert('Bug!'); } return selection; } //--> </script> </head> <body> <form name="postMsg"> <input type="button" value="B" onClick="insertTag('b'); return false;"><br> <textarea name="poslText" rows="10" cols="40"></textarea> </form> </body> </html> prostě se svíma nynějšíma znalostma JS sám nepochopím. Chceto nějákej help Hesky česky a bez reklam jako na rádiu Blaník :-)) |
||
Chamurappi Profil |
#8 · Zasláno: 28. 8. 2009, 14:03:52 · Upravil/a: Chamurappi
Reaguji na _es:
Ano, vím, ale tazatel to vědět nepotřebuje, když tu univerzálnější metodu pravděpodobně neznal. Reaguji na dana5505: Co to dělá? Co to nedělá? Odkaž prosím na živou ukázku, jestli máš zájem o nějakou radu. |
||
peta Profil |
#9 · Zasláno: 28. 8. 2009, 16:01:48
dan5505
"BBcode na začátek a konec označeného textu. tak jako je to na tomto fóru. " Dival ses do JS zdrojaku fora? Tam to vsechno je, nic neni ukryto. "Řešilo se to už několikrát. Například zde: http://diskuse.jakpsatweb.cz/index.php?action=vthread&topic=92530&forum=8&page=-1 " Dival ses na tu adresu nekdy a na odkazy na ni? treba ja tam dal jednoduchy editor, ktery to vsechno dokaze. Zrejme neco podobne i ostatni. Pokud si prispevky nectes, ma smysl ti nejake psat? Pokud mas problem se svym kodem, vytvor jednoduchou stranku a dej na ni odkaz, aby meli vsichni k dispozici stejny kod. Odpovedi typu nemuzu, je to tajne, neumim dat stranku na web, nechci, takovym lidem se neda pomoci. |
||
dan5505 Profil |
#10 · Zasláno: 28. 8. 2009, 16:29:16
„Jak ošetřuješ situace, kdy ti někdo neuzavře značku? To máš pak neuzavřenou tučnost i v HTML?“
hmm k tomu sem se ještě nedostal. za prvé donedávna sem používal WYSIWYG editor kterej sem stáhl z netu a zadruhé mně ani nenapadlo že by někdo naschvál neuzavřel značku. „Co to dělá? Co to nedělá? Odkaž prosím na živou ukázku, jestli máš zájem o nějakou radu.“ je to asi neuvěřitelné ale funguje to. dokonce to umí i vlkádat url tagy a určitě mnoho dalšího... problém spočívá v tom že vůbec nevím jak funguje nemůžu si sám zotpovědět tyto otázky: 1) jak zjistit pozici kurzoru v textareaře 2)jak nastavit kurzor na zvolenou pozici v textareaře 3)jak vložit na zvolenou pozici text. 4)pokud je v textareaře označený text jak vložit text na začátek a konec označeného textu. tohle je vlastně můj problém. |
||
dan5505 Profil |
#11 · Zasláno: 28. 8. 2009, 16:31:34
„Dival ses na tu adresu nekdy a na odkazy na ni? treba ja tam dal jednoduchy editor, ktery to vsechno dokaze. Zrejme neco podobne i ostatni. Pokud si prispevky nectes, ma smysl ti nejake psat? “
nemyslíš náhoodou tenhle odkaz ? http://www.volny.cz/peter.mlich/jpw/#formulare |
||
dan5505 Profil |
#12 · Zasláno: 28. 8. 2009, 16:33:13
Pokud mas problem se svym kodem, vytvor jednoduchou stranku a dej na ni odkaz, aby meli vsichni k dispozici stejny kod.
Odpovedi typu nemuzu, je to tajne, neumim dat stranku na web, nechci, takovym lidem se neda pomoci. ten kod neni muj. ale je z tohoto fora... problem je že s JS začínám a nerozumim mu. |
||
Časová prodleva: 15 let
|
0