Jak podświetlić / zaznaczyć zawartość znacznika DIV, gdy użytkownik kliknie DIV ... Pomysł polega na tym, że cały tekst jest podświetlony / zaznaczony, aby użytkownik nie musiał ręcznie zaznaczać tekstu myszą i potencjalnie przegapić fragment tekstu?
Na przykład, powiedzmy, że mamy DIV jak poniżej:
<div id="selectable">http://example.com/page.htm</div>
... a gdy użytkownik kliknie którykolwiek z tych adresów URL, cały tekst adresu URL jest podświetlany, dzięki czemu może łatwo przeciągnąć wybrany tekst w przeglądarce lub skopiować cały adres URL prawym przyciskiem myszy.
Dzięki!
javascript
css
Acyra
źródło
źródło
document.getElementById('selectable')
jąthis
. Następnie możesz dyskretnie dodać tę funkcjonalność do kilku elementów, na przykład kilku elementów div w kontenerze:jQuery('#selectcontainer div').click(selectText);
if (window.getSelection) {
powinno być pierwsze w przypadku Opery ( quirksmode.org/dom/range_intro.html )window.getSelection().removeAllRanges();
przedwindow.getSelection().addRange(range);
UPDATE 2017:
Aby wybrać zawartość węzła, wywołaj:
Działa to we wszystkich nowoczesnych przeglądarkach, w tym IE9 + (w trybie standardowym).
Wykonalny przykład:
Oryginalna odpowiedź poniżej jest przestarzała, ponieważ
window.getSelection().addRange(range);
została wycofanaOryginalna odpowiedź:
Wszystkie powyższe przykłady używają:
ale problem polega na tym, że wybiera sam węzeł, w tym znacznik DIV itp.
Aby wybrać tekst węzła zgodnie z pytaniem OP, musisz zamiast tego zadzwonić:
Tak więc pełny fragment będzie wyglądał następująco:
źródło
this
zamiast pobierania elementu na podstawie identyfikatora, o ile znajduje się on wclick
detektorze elementu .Istnieje czyste rozwiązanie CSS4:
user-select
to specyfikacja modułu CSS na poziomie 4, która obecnie jest wersją roboczą i niestandardową właściwością CSS, ale przeglądarki dobrze ją obsługują - zobacz # search = user-select .Przeczytaj więcej o wyborze użytkownika tutaj na MDN i baw się nim tutaj w w3scools
źródło
Odpowiedź Neuroxika była bardzo pomocna. Miałem tylko problem z Chrome, bo kiedy kliknąłem na zewnętrzny div, to nie działało. Mogę rozwiązać ten problem, usuwając stare zakresy przed dodaniem nowego zakresu:
źródło
W przypadku rzeczy, które można edytować (nie zwykłych danych wejściowych, musisz użyć selectNodeContents (zamiast tylko selectNode).
UWAGA: Wszystkie odniesienia do "document.selection" i "createTextRange ()" dotyczą IE 8 i niższych ... Prawdopodobnie nie będziesz musiał wspierać tego potwora, jeśli próbujesz robić takie trudne rzeczy.
źródło
Korzystając z pola tekstowego, możesz użyć tego: (przez Google)
Widzę, że tak robi większość witryn internetowych. Po prostu stylizują go za pomocą CSS, aby nie wyglądał jak obszar tekstowy.
źródło
this.focus();this.select();
?Ten fragment kodu zapewnia wymaganą funkcjonalność . Musisz tylko dodać zdarzenie do tego elementu div, który aktywuje w nim fnSelect. Szybki hack, którego całkowicie nie powinieneś robić i prawdopodobnie nie zadziała, wyglądałby następująco:
Oczywiście zakładając, że link do fragmentu został uwzględniony.
źródło
Uważam, że przydatne jest zawinięcie tej funkcji jako wtyczki jQuery:
Staje się więc rozwiązaniem wielokrotnego użytku. Następnie możesz to zrobić:
I wybierze test w div.
źródło
A co z tym prostym rozwiązaniem? :)
Jasne, że nie jest to konstrukcja div, jak wspomniałeś, ale nadal działa dla mnie.
źródło
Niko Lay: A co z tym prostym rozwiązaniem? :)
.....
Kod przed:
Kod po:
Tylko ta część onclick = "this.select ();" id = "do wyboru" w moim kodzie działało dobrze. Zaznacza wszystko w moim polu kodu jednym kliknięciem myszy.
Dzięki za pomoc Niko Lay!
źródło
Powyższa odpowiedź nie działa w Chrome, ponieważ addRange usuwa poprzednio dodany zakres. Nie znalazłem na to żadnego rozwiązania poza fałszywym wyborem z css.
źródło
Łatwo to osiągnąć dzięki ustawieniu wyboru przez użytkownika właściwości css na all. Lubię to:
źródło