Lynx Posted July 21, 2005 Report Share Posted July 21, 2005 Tātad man ir neliels skripts, ceru, ka nav pa lielu, lai te kopētu: function codeinsert(tag) { var myValue = "[" + tag + "][/" + tag + "]"; //IE if (document.selection) { document.post.txt.focus(); sel = document.selection.createRange(); sel.text = myValue; document.post.txt.focus(); } //MOZILLA else if (document.post.txt.selectionStart) { var startPos = document.post.txt.selectionStart; var endPos = document.post.txt.selectionEnd; document.post.txt.value = document.post.txt.value.substring(0, startPos) + myValue + document.post.txt.value.substring(endPos, document.post.txt.value.length); document.post.txt.focus(); document.post.txt.selectionStart = startPos + myValue.length; document.post.txt.selectionEnd = startPos + myValue.length; } else { document.post.txt.value += myValue; document.post.txt.focus(); } } Ideja ir šāda, ka nospiežot uz linku tiek ielikts iekš <textarea> noteikts teksts piemēram [c][/c](C, jo šejienes bbcode izkauj B tagus) kursora atrašanās vietā un pēc ielikšanas kursors novietojas tieši pēc ievietotā teksta. Jautājums, kā uztaisīt, ka kursors tiek pabīdits, piemēram, 4as zīmes atpakaļ, lai būtu tieši pa vidu starp [c] un [/c]? Link to comment Share on other sites More sharing options...
bubu Posted July 21, 2005 Report Share Posted July 21, 2005 (edited) Nezinu kā ar IE, bet uz Mozillas: document.post.txt.setSelectionRange(6,6); Kur 6 - charakters pēc kura uzlikt kursoru (īstenībā tā fja iezīmē tekstu no pirmā parametra pozīcijas līdz otrā parametra pozīcijai, bet ja nu abi ir vienādi, tad vienkārši pozicionējas kursors) Edit: šitā jādara ar IE: http://www.howtocreate.co.uk/emails/MahithaKancherla.html Edited July 21, 2005 by bubu Link to comment Share on other sites More sharing options...
Lynx Posted July 21, 2005 Author Report Share Posted July 21, 2005 Ideāli, paldies! loc = document.post.txt.selectionStart - 4; document.post.txt.setSelectionRange(loc,loc); Eh, nekur nevaru atrast javascript iebūvēto funkciju sarakstu tikai samplus. Tad nebūtu japrasa šeit: kā var noteikt stringa garumu. Tad es kodā automātiksi noteiktu cik garš ir "tag" pieskaitītu klāt 3 jo [/] un nebūtu manuāli nekas jāraksta. Link to comment Share on other sites More sharing options...
bubu Posted July 21, 2005 Report Share Posted July 21, 2005 (edited) var s="blabla"; alert(s.length); Javasckript dokumentācija jāskatās Par iebūvētajiem objektiem (string, array, regexp, utt): http://docs.sun.com/source/816-6408-10/ Par DOM/DHTML MS refernece: http://msdn.microsoft.com/workshop/author/...rence_entry.asp Par DOM Mozilla reference: http://www.mozilla.org/docs/dom/domref/dom_shortTOC.html Tur viss ir. Edited July 21, 2005 by bubu Link to comment Share on other sites More sharing options...
Lynx Posted July 21, 2005 Author Report Share Posted July 21, 2005 Tā featuru ziņā uztaisīju visu ko vēlos un viss arī strādā kā nākas, ja neskaita 2us bugus - katram browserim pa vienam. <script type="text/javascript"> <!-- function codeinsert(tag) { //IE if (document.selection) { if(tag == "URL" || tag == "IMG") { var myValue = "[" + tag + "]http://" + document.selection.createRange().text + "[/" + tag + "]"; } else { var myValue = "[" + tag + "]" + document.selection.createRange().text + "[/" + tag + "]"; } document.post.txt.focus(); sel = document.selection.createRange(); sel.text = myValue; document.post.txt.focus(); var range = document.post.txt.createTextRange(); position = range.text.length; range.collapse(true); range.moveEnd("character", position - tag.length -3); range.moveStart("character", position - tag.length -3); range.select(); } Tā IE daļa visa pozicionēšana darbojas ideāli līdz brīdim, kad tiek nospiests Enter tālāk tiek skaitīta viena zīme pa daudz, kas nojauc visu kursora pozicionēšanu un galīgi nav labi, ja [/sheit] tiek novietots kursors. Ir kautkaads veids kā panākt, ka tie enter tiek ignorēts skaitīšanā? //MOZILLA else if (document.post.txt.selectionStart) { var startPos = document.post.txt.selectionStart; var endPos = document.post.txt.selectionEnd; if(tag == "URL" || tag == "IMG") { var myValue = "[" + tag + "]http://" + document.post.txt.value.substring(startPos,endPos) + "[/" + tag + "]"; } else { var myValue = "[" + tag + "]" + document.post.txt.value.substring(startPos,endPos) + "[/" + tag + "]"; } document.post.txt.value = document.post.txt.value.substring(0, startPos) + myValue + document.post.txt.value.substring(endPos, document.post.txt.value.length); document.post.txt.focus(); loc = startPos + myValue.length - tag.length -3; document.post.txt.setSelectionRange(loc,loc); } else { document.post.txt.value += myValue; document.post.txt.focus(); } } // --> </script> Mozzilai atkal problēma ir tāda, ka pati pirmā zīme iekš <textarea> tiek principiāli ignorēta un rodas dīvaini gļuki. Ja nav nevienas zīmes, tad kursors pēc teksta ievadīšanas tiek novietots beigās, nevis pāris zīmes atpakaļ. Tikko kā ierakstam kautvai atstarpi viss darbojas. Vēlāk kad ieviesu, lai pa vidu tiktu ievadīts iezīmētais teksts, ja nav neviena zīme tad vienkārši tiek insertots vārds "undefined", kā arī ja mēs iezīmējam tekstu un iezīmētajā teksta laukumā ir 1ā zīme viss teksts tiek repleicots ar vārdu "undefined". Citos gadījumos viss strādā perfekti. Link to comment Share on other sites More sharing options...
bubu Posted July 21, 2005 Report Share Posted July 21, 2005 (edited) mozillas vaina tev ir šāda: 0==false! Ja selectionStart=0, tad if (0) ir false un mozilla kods neizpildās, izpildās trešā koda daļa, kurā nav definēts myValue, tāpēc arī ir undefined. IE vainu tev nezinu, es uzrakstīju savu kodu, un tas gan uz mozillas, gan IE ir ok: <html><head><script> function codeinsert(tag) { var elem = document.getElementById("txt"); elem.focus(); if (typeof document.selection != "undefined") { var range = document.selection.createRange(); range.text = "[" + tag + "]" + (tag=="URL"||tag=="IMG"?"http://":"") + range.text + "[/" + tag + "]"; range.move("character", -tag.length-3); range.select(); } else if (typeof elem.selectionStart != "undefined") { var startPos = elem.selectionStart; var endPos = elem.selectionEnd; var myValue = "[" + tag + "]" + (tag=="URL"||tag=="IMG"?"http://":"") + elem.value.substring(startPos ,endPos) + "[/" + tag + "]"; elem.value = elem.value.substring(0, startPos) + myValue + elem.value.substring(endPos, elem.value.length); var x = startPos + myValue.length - tag.length - 3; elem.setSelectionRange(x, x); } else { elem.value += "[" + tag + "]" + (tag=="URL"||tag=="IMG"?"http://":"") + "[/" + tag + "]"; } } </script></head><body> <input type="button" onclick="codeinsert('IMG');" value="IMG"/> <input type="button" onclick="codeinsert('URL');" value="URL"/> <input type="button" onclick="codeinsert('B');" value="B"/><br/> <textarea id="txt" rows=10 cols=50></textarea> </body></html> Edited July 21, 2005 by bubu Link to comment Share on other sites More sharing options...
Lynx Posted July 21, 2005 Author Report Share Posted July 21, 2005 Liels paldies, darbojas ideāli! Link to comment Share on other sites More sharing options...
Recommended Posts