Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Mały edytor WYSIWYG
Forum PHP.pl > Forum > Przedszkole
adrianozo
Witam.
Mam problem, ponieważ nie wiem jak zrobić taki mały edytor. Chodzi mi o to, że gdy kliknę w literkę b to automatycznie pokaże mi się kod [b.][./b](bez kropek) w polu tekstowym. Wiem jedynie, że muszę skorzystać z JavaScript, a konkretniej z getElementById.
Tylko nie wiem co z tym dalej zrobić.
Mógłbym prosić o pomoc?
Z góry dziękuje smile.gif
thek
Prosta funkcja do prostego tagowania. Podpina sie ją pod guzik i oznacza ID pola, którego ma tyczyć oraz wpisywany ciąg znaków. ostatecznie więc wygląda to tak:
  1. <input type="button" value="Podkreślenie" onclick="putTag('textarea', '[.u]', '[/.u]')" />

[JAVASCRIPT] pobierz, plaintext
  1. function putTag(field, strBefore, strAfter) {
  2. element = document.getElementById(field);
  3. element.focus();
  4. // IE
  5. if (document.selection) {
  6. var oRange = document.selection.createRange();
  7. var numLen = oRange.text.length;
  8. oRange.text = strBefore + oRange.text + strAfter;
  9. return false;
  10. // FF i Opera
  11. } else if (element.setSelectionRange) {
  12. var selStart = element.selectionStart, selEnd = element.selectionEnd;
  13. var oldScrollTop = element.scrollTop;
  14. oRange = element.value.substring(selStart, selEnd);
  15. element.value = element.value.substring(0, selStart) + strBefore + oRange + strAfter + element.value.substring(selEnd);
  16. element.setSelectionRange(selStart + strBefore.length, selEnd + strBefore.length);
  17. element.scrollTop = oldScrollTop;
  18. element.focus();
  19. } else {
  20. var oldScrollTop = element.scrollTop;
  21. element.value += strBefore + strAfter;
  22. element.scrollTop = oldScrollTop;
  23. element.focus();
  24. }
  25. }
[JAVASCRIPT] pobierz, plaintext
adrianozo
Dlaczego ta funkcja jest taka długa? I czy to tylko jest do [u.]?
Sueroski
Nie, to jest do każdego tagu. Analogicznie dla na <b>:
Kod
<input type="button" value="Podkreślenie" onclick="putTag('textarea', '[.b]', '[/.b]')" />
thek
Funkcja ma być prosta, ale nie prostacka winksmiley.jpg Jest uniwersalna byś mógł tam kłaść co chcesz za znaczki. strBefore to tag otwierający, strAfter to tag zamykający. Poza tym jest to długie bo działa z zaznaczonym tekstem.Jeśli myszką zaznaczysz jakiś kawałek tekstu, to znaczniki obejmą tylko ten tekst, a nie jak wiele skryptów od tego krótszych, wrzucą tylko tagi na koniec smile.gif

No i stąd mogę potem robić takie coś jak osobny guzik od podkreślenia, osobny od pogrubienia i osobny od kursywy.

EdiT: Dodam, że to i tak ciut obcięta wersja, bo w pełniejszej postaci, dłuższej o może 10 linijek, wrzuciłem także tworzenie list numerowanych i nienumerowanych, gdzie automatycznie tworzył sobie kolejne podpunkty listy poprzez wychwycenie znaku przejścia do nowej linii.
user767
Ja dodam coś, co znalazłem w sieci, a szukałem niecałe 30 minut:

js
  1. var Editor;
  2.  
  3. function Format(action)
  4. {
  5. Editor.execCommand(action, false, null);
  6. }
  7.  
  8. function Colour(colour)
  9. {
  10. Editor.execCommand("forecolor",false, colour);
  11. }
  12.  
  13. window.onload = function()
  14. {
  15. Editor = document.getElementById('textbox').contentWindow.document;
  16. Editor.designMode = "on";
  17. document.forms[0].onsubmit = function()
  18. {
  19. var text = document.getElementById('text');
  20. text.value = Editor.body.innerHTML;
  21. }
  22. }
  23.  


html
  1. <head>
  2. <title>Simple Javascript WYSIWYG Editor</title>
  3. <script language="Javascript" src="editor.js"></script>
  4. </head>
  5. <body>
  6. <form method="POST">
  7. <div>
  8. <input type="button" onclick="Colour('Green')" style="background-color:Green;" />
  9. <input type="button" onclick="Colour('Red')" style="background-color:Red;" />
  10. <input type="button" onclick="Colour('Blue')" style="background-color:Blue;" />
  11. <input type="button" onclick="Colour('Black')" style="background-color:Black;" />
  12. <input type="button" onclick="Format('bold')" value="B" />
  13. <input type="button" onclick="Format('italic')" value="I" />
  14. <input type="button" onclick="Format('Underline')" value="U" />
  15. <input type="button" onclick="Format('justifycenter')" value="C" />
  16. <input type="button" onclick="Format('justifyleft')" value="L" />
  17. <input type="button" onclick="Format('justifyright')" value="R" /><br/>
  18. <iframe id="textbox" style="width:300px; height:150px"></iframe><br/>
  19. <input type="submit" value="Go" />
  20. <input type="hidden" id="text" name="text" />
  21. </div>
  22. </form>
  23. </body>
  24. </html>
  25.  


z http://cstruter.com/blog/45
i działa

editŁ
http://msdn.microsoft.com/en-us/library/aa...fice.11%29.aspx execCommand Method
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.