Chciałbym, aby użytkownicy kliknęli link, a następnie zaznacza tekst HTML w innym elemencie ( nie na wejściu).
Przez „wybierz” mam na myśli ten sam sposób, w jaki zaznaczasz tekst, przeciągając myszą nad nim. To był niedźwiedź do badań, ponieważ wszyscy mówią o „wybierz” lub „wyróżnij” innymi słowami.
czy to możliwe? Mój kod do tej pory:
HTML:
<a href="javascript:" onclick="SelectText('xhtml-code')">Select Code</a>
<code id="xhtml-code">Some Code here </code>
JS:
function SelectText(element) {
$("#" + element).select();
}
Czy brakuje mi czegoś rażąco oczywistego?
javascript
jquery
Jason
źródło
źródło
Odpowiedzi:
Zwykły JavaScript
Oto działające demo . Dla tych z Was, którzy szukają wtyczki jQuery, zrobiłem też jedną z nich .
jQuery (oryginalna odpowiedź)
W tym wątku znalazłem rozwiązanie tego problemu . Byłem w stanie zmodyfikować podane informacje i wymieszać je z odrobiną jQuery, aby stworzyć całkowicie niesamowitą funkcję zaznaczania tekstu w dowolnym elemencie, niezależnie od przeglądarki:
źródło
browser
sniffer.Oto wersja bez wąchania przeglądarki i bez polegania na jQuery:
źródło
div contentEditable='true'
?Kod Jasona nie może być używany dla elementów wewnątrz ramki iframe (ponieważ zakres różni się od okna i dokumentu). Rozwiązałem ten problem i zmodyfikowałem go, aby mógł być używany jak każda inna wtyczka jQuery (łańcuchowa):
Przykład 1: Zaznaczenie całego tekstu w tagach <code> jednym kliknięciem i dodanie klasy „zaznaczono”:
Przykład 2: Po kliknięciu przycisku wybierz element wewnątrz ramki iframe:
Uwaga: pamiętaj, że źródło iframe powinno znajdować się w tej samej domenie, aby uniknąć błędów bezpieczeństwa.
jQuery Plugin:
Testowałem to w IE8, Firefox, Opera, Safari, Chrome (aktualne wersje). Nie jestem pewien, czy to działa w starszych wersjach IE (szczerze mnie to nie obchodzi).
źródło
Ten wątek zawiera naprawdę wspaniałe rzeczy. Ale nie mogę tego zrobić na tej stronie przy użyciu FF 3.5b99 + FireBug z powodu „błędu bezpieczeństwa”.
Yipee !! Dzięki temu kodowi mogłem wybrać cały pasek boczny po prawej stronie, mam nadzieję, że pomoże Ci:
PS: - Nie byłem w stanie używać obiektów zwróconych przez selektory jquery, takie jak
źródło
Aby wybrać zawartość dowolnego elementu, możesz użyć następującej funkcji:
Tę funkcję można wywołać w następujący sposób:
źródło
Szukałem tego samego, moje rozwiązanie było następujące:
źródło
focus()
w przypadku braku danych wejściowych, o to właśnie chodzi w tym pytaniu.Lubiłem odpowiedź Lepe'a z wyjątkiem kilku rzeczy:
Oto, co wymyśliłem, kiwając głową na odpowiedź Lepe'a w poszukiwaniu inspiracji. Jestem pewien, że będę wyśmiewany, ponieważ jest to może trochę ciężkie ręce (i właściwie może to być więcej, ale dygresuję). Ale to działa i unika wąchania przeglądarki i o to właśnie chodzi .
Otóż to. Niektóre z nich dotyczą czytelności i / lub wygody. Testowane na komputerach Mac w najnowszych wersjach Opera, Safari, Chrome, Firefox i IE. Testowany również w IE8. Zazwyczaj deklaruję zmienne tylko wtedy, gdy są potrzebne w blokach kodu, ale jslint zasugerował, że wszystkie powinny być zadeklarowane do góry. Ok jslint.
Edytuj Nie pamiętam, aby dołączyć sposób powiązania tego z kodem operacji:
Twoje zdrowie
źródło
setBaseAndExtent()
tylko dlatego, że istnieje, wydaje mi się bezcelowe, kiedy można po prostu usunąć tę gałąź i wszystko działa równie dobrze i w sposób zgodny ze standardami. Wykrywanie funkcji jest przyjemne, ale zmęczyło mnie testowanie wszystkiego dość szybko.setBaseAndExtent
to, że jest to znacznie bardziej wydajne, a nawet przy dodanymif
statemnent jest o wiele bardziej, niż jeśli „usuniesz tę gałąź”. Naprawdę nie rozumiem komentarza „Zmęczyłbym się…”? Napisz i zapomnij, jedyne, co musisz zrobić, to wywołać funkcję, a nie napisać. :)setBaseAndExtent
był znacznie bardziej wydajny niżaddRange
. Dlaczego miałoby to być? Mój drugi komentarz był związany z etosem testowania funkcji, rozszerzonym na wszystkie interakcje DOM: jest okropnie dużo kodu, aby przetestować każdą metodę i właściwość DOM przed użyciem. Nie potępiam; Cieszę się, że mogę narysować linię i poczynić jeszcze kilka założeń w moim kodzie.Zaktualizowana wersja działająca w chrome:
http://jsfiddle.net/KcX6A/326/
źródło
Dla każdego znacznika można zaznaczyć cały tekst wewnątrz tego znacznika za pomocą tego krótkiego i prostego kodu. Podświetli cały obszar znacznika kolorem żółtym i zaznaczy tekst wewnątrz niego jednym kliknięciem.
źródło
lepe - To działa świetnie dla mnie dzięki! Umieszczam Twój kod w pliku wtyczki, a następnie używam go w połączeniu z każdą instrukcją, abyś mógł mieć wiele tagów wstępnych i wiele linków „Zaznacz wszystko” na jednej stronie, a następnie wybierze prawidłowy kod wstępny do podświetlenia:
źródło
Spójrz na obiekt Selection (silnik Gecko) i obiekt TextRange (silnik Trident). Nie wiem o żadnych strukturach JavaScript obsługujących tę zaimplementowaną przeglądarkę, ale nigdy go nie szukałem, więc możliwe, że ma to nawet jQuery.
źródło
Metoda Tima działa idealnie w moim przypadku - zaznaczanie tekstu w div zarówno dla IE, jak i FF po zastąpieniu następującej instrukcji:
z następującymi:
Tekst w div wybiera się, klikając go za pomocą następującej funkcji jQuery:
źródło
oto inne proste rozwiązanie, aby uzyskać zaznaczony tekst w postaci ciągu, możesz łatwo użyć tego ciągu, aby dodać element div elementu podrzędnego do swojego kodu:
źródło
Moim szczególnym przypadkiem użycia było wybranie zakresu tekstu w edytowalnym elemencie zakresu, który, o ile mogłem zobaczyć, nie jest opisany w żadnej z odpowiedzi tutaj.
Główną różnicą jest to, że musisz przekazać węzeł typu
Text
doRange
obiektu, jak opisano w dokumentacji Range.setStart () :Text
Węzeł węzeł jest pierwszym dzieckiem elementu przęsła, tak aby zdobyć, dostęp dochildNodes[0]
elementu zakresu. Reszta jest taka sama jak w większości innych odpowiedzi.Oto przykład kodu:
Inna istotna dokumentacja: Wybór
zakresu Document.createRange () Window.getSelection ()
źródło
Dodano
jQuery.browser.webkit
do „else if” dla Chrome. Nie można uruchomić tego w Chrome 23.Wykonałem poniższy skrypt do wybierania treści w
<pre>
znaczniku, który maclass="code"
.źródło
Zgodnie z dokumentacją jQuery
select()
:Wyjaśniasz, dlaczego jQuery
select()
nie działa w tym przypadku.źródło