Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript]Zaznaczenie tekstu do edycji
castagir
post 9.05.2016, 07:23:02
Post #1





Grupa: Zarejestrowani
Postów: 146
Pomógł: 3
Dołączył: 28.10.2014

Ostrzeżenie: (10%)
X----


Witam!

Robię prosty edytor tekstu na swoją stronę i potrzebuję pomocy w stworzeniu funkcji, która by wykrywała zaznaczony tekst w danym paragrafie lub pozycję gdzie znajduje się aktualnie ta kreska pionowa oznaczają miejsce od, którego pisze się tekst.

Na razie mam takie coś:
  1. var arkusz;
  2. $('.przyb').on('click', 'button', function(){
  3. arkusz = $(this).parent().parent().parent().find('.arkusz');
  4. trescCala = arkusz.html();
  5. zaznaczenie = arkusz.getSelection();
  6. start = arkusz.selectionStart;
  7. koniec = arkusz.selectionEnd;
  8. alert(trescCala+' '+zaznaczenie+' '+start+' '+koniec);
  9. });


Sam html wygląda tak:
  1. <li class="przyb-wizual">
  2. <ul class="przyb tlo-grad-1">
  3. <!--- tutaj znajduje się lista przycisków, które powinny aktywować funkcję -->
  4. </ul>
  5. <p class="arkusz" contenteditable="true">
  6.  
  7. </p>
  8. </li>


Chciałbym po wykryciu tego tekstu lub miejsca kreski pionowej wstawiać elementy HTML.
Go to the top of the page
+Quote Post
rad11
post 9.05.2016, 07:37:29
Post #2





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


https://www.google.pl/webhp?sourceid=chrome...on+in+paragraph
Go to the top of the page
+Quote Post
LowiczakPL
post 9.05.2016, 07:49:25
Post #3





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----


linia

arkusz = $(this).parent().parent().parent().find('.arkusz');

powinna wyglądać tak

var arkusz = $(".arkusz");

nie zapominaj o VAR jest to bardzo ważne inaczej wszystkie zmienne są globalne

Ten post edytował LowiczakPL 9.05.2016, 07:52:43


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post
castagir
post 9.05.2016, 08:01:19
Post #4





Grupa: Zarejestrowani
Postów: 146
Pomógł: 3
Dołączył: 28.10.2014

Ostrzeżenie: (10%)
X----


Cytat(LowiczakPL @ 9.05.2016, 08:49:25 ) *
linia

arkusz = $(this).parent().parent().parent().find('.arkusz');

powinna wyglądać tak

var arkusz = $(".arkusz");

nie zapominaj o VAR jest to bardzo ważne inaczej wszystkie zmienne są globalne


Niestety nie może być to odniesienie bezpośrednie do tego elementu, gdyż mam dwa takie same elementy na w kodzie html.
A mi chodzi dokładnie o ten jeden element, dlatego jest taka długa ścieżka
Go to the top of the page
+Quote Post
szczemp
post 9.05.2016, 11:51:27
Post #5





Grupa: Zarejestrowani
Postów: 149
Pomógł: 9
Dołączył: 9.12.2010

Ostrzeżenie: (0%)
-----


Cytat(castagir @ 9.05.2016, 09:01:19 ) *
Niestety nie może być to odniesienie bezpośrednie do tego elementu, gdyż mam dwa takie same elementy na w kodzie html.
A mi chodzi dokładnie o ten jeden element, dlatego jest taka długa ścieżka

To nadaj mu id.
Go to the top of the page
+Quote Post
castagir
post 9.05.2016, 14:01:05
Post #6





Grupa: Zarejestrowani
Postów: 146
Pomógł: 3
Dołączył: 28.10.2014

Ostrzeżenie: (10%)
X----


Cytat(szczemp @ 9.05.2016, 12:51:27 ) *
To nadaj mu id.


Nie mogę mu nadać ID, gdyż mam dwa rodzaje edytorów: wizualny i html. Oba mają taki sam element w formularzu, którym jest właśnie element o klasie "arkusz", z którego jest pobierany jest tekst do wysłania. Poza tym to nie jest problem, który chcę rozwiązać.

PS: Siedzę na telefonie i niechcący kliknęło się "Pomógł". Da się to jakoś cofnąć?

Ten post edytował castagir 9.05.2016, 14:01:37
Go to the top of the page
+Quote Post
LowiczakPL
post 9.05.2016, 16:06:12
Post #7





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----


sprawdź to

  1. var zaznaczonyText = "";
  2. if (window.getSelection) {
  3. zaznaczonyText = window.getSelection().toString();
  4. } else if (document.selection && document.selection.type != "Control") {
  5. zaznaczonyText = document.selection.createRange().text;
  6. }
  7.  
  8. console.log(zaznaczonyText);


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post
zegarek84
post 9.05.2016, 16:42:56
Post #8





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


już 5 lat nie pisałem nic przy edytorach ale coś tam pamiętam...
Cytat(castagir @ 9.05.2016, 08:23:02 ) *
Chciałbym po wykryciu tego tekstu lub miejsca kreski pionowej wstawiać elementy HTML.

to są 2 różne operacje... chcesz zastąpić zaznaczenie kodem html czy może wstawić html na początku/końcu zaznaczenia po czym przesunąć zaznaczenie??

rozwiązać to można na kilka sposobów...
jeśli chcesz zastąpić zaznaczenie kodem html to w IE masz pasteHTML a w pozostałych execCommand command insertHTML, zawsze też możesz usunąć treść po czym mając karetkę wstawić konkretny element wspierany przez wszystkie przeglądarki z unikalnym id czyli "hr", po czym możesz wykonać operacje DOM

jeśli wspierasz od IE9 i chcesz wstawić kod przed zaznaczeniem to masz metodę insertNode

ogólnie od IE9 masz baaaardzo wygodnie gdyż masz takie metody jak collapseToEnd oraz collapseToStart

ogólnie polecam zapoznanie się z kodem źródłowym jakiegoś prostego edytora np. CLEditor

jeszcze 5 lat temu musiałem nieźle gimnastykować się z brakiem kilku metod, filtrowaniem pewnych atrybutów i dozwolonych elementów html w manifo.pl, do niektórych zastosowań w treści musiałem wstawiać elementy html z unikalnymi id by mieć punkt zaczepienia...

pozdrawiam

Ten post edytował zegarek84 9.05.2016, 16:44:41


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 04:38