Ich möchte, dass Benutzer auf einen Link klicken und dann den HTML-Text in einem anderen Element auswählen ( keine Eingabe).
Mit "auswählen" meine ich die gleiche Art und Weise, wie Sie Text auswählen würden, indem Sie Ihre Maus darüber ziehen. Dies war ein Bär für die Forschung, da alle in anderen Begriffen von "Auswählen" oder "Hervorheben" sprechen.
Ist das möglich? Mein Code bisher:
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();
}
Vermisse ich etwas offensichtliches?
javascript
jquery
Jason
quelle
quelle
Antworten:
Einfaches Javascript
Hier ist eine funktionierende Demo . Für diejenigen unter Ihnen, die nach einem jQuery-Plugin suchen, habe ich auch eines davon erstellt .
jQuery (ursprüngliche Antwort)
Ich habe in diesem Thread eine Lösung dafür gefunden . Ich konnte die angegebenen Informationen ändern und mit etwas jQuery mischen, um eine großartige Funktion zum Auswählen des Texts in einem beliebigen Element zu erstellen, unabhängig vom Browser:
quelle
browser
Schnüffler entfernt.Hier ist eine Version ohne Browser-Sniffing und ohne Vertrauen in jQuery:
quelle
div contentEditable='true'
?Jasons Code kann nicht für Elemente innerhalb eines Iframes verwendet werden (da sich der Bereich von Fenster und Dokument unterscheidet). Ich habe dieses Problem behoben und es geändert, um es als jedes andere jQuery-Plugin (verkettbar) zu verwenden:
Beispiel 1: Auswahl des gesamten Textes in <code> -Tags mit einem Klick und Hinzufügen der Klasse "selected":
Beispiel 2: Wählen Sie beim Klicken auf die Schaltfläche ein Element in einem Iframe aus:
Hinweis: Denken Sie daran, dass sich die Iframe-Quelle in derselben Domäne befinden sollte, um Sicherheitsfehler zu vermeiden.
jQuery Plugin:
Ich habe es in IE8, Firefox, Opera, Safari, Chrome (aktuelle Versionen) getestet. Ich bin nicht sicher, ob es in älteren IE-Versionen funktioniert (aufrichtig ist mir egal).
quelle
Dieser Thread enthält wirklich wundervolle Sachen. Aber ich kann es auf dieser Seite mit FF 3.5b99 + FireBug aufgrund von "Sicherheitsfehler" nicht richtig machen.
Yipee !! Ich konnte mit diesem Code die gesamte rechte Seitenleiste auswählen. Ich hoffe, es hilft Ihnen:
PS: - Ich konnte keine Objekte verwenden, die von jquery-Selektoren wie zurückgegeben wurden
quelle
Mit der folgenden Funktion können Sie den Inhalt eines Elements auswählen:
Diese Funktion kann wie folgt aufgerufen werden:
quelle
Ich suchte nach der gleichen Sache, meine Lösung war folgende:
quelle
focus()
für eine Nicht-Eingabe verwenden, worum es in dieser Frage geht.Ich mochte Lepes Antwort bis auf ein paar Dinge:
Hier ist, was ich mir ausgedacht habe, mit einer Anspielung auf Lepes Antwort zur Inspiration. Ich bin mir sicher, dass ich verspottet werde, da dies vielleicht ein bisschen hartnäckig ist (und eigentlich mehr sein könnte, aber ich schweife ab). Aber es funktioniert und vermeidet Browser-Schnüffeln und das ist der Punkt .
Das ist es. Sie sehen unter anderem die Lesbarkeit und / oder Bequemlichkeit. Getestet auf Mac in den neuesten Versionen von Opera, Safari, Chrome, Firefox und IE. Auch in IE8 getestet. Außerdem deklariere ich Variablen normalerweise nur, wenn / wenn sie in Codeblöcken benötigt werden, aber jslint schlug vor, sie alle oben zu deklarieren. Ok jslint.
Bearbeiten Ich habe vergessen anzugeben, wie dies mit dem Code der Operation verknüpft werden soll:
Prost
quelle
setBaseAndExtent()
nur weil er existiert, für mich sinnlos erscheint, wenn Sie diesen Zweig einfach entfernen können und alles genauso gut und standardbasiert funktioniert. Die Funktionserkennung ist nett, aber ich würde es leid sein, alles so schnell gründlich zu testen.setBaseAndExtent
dass es wesentlich effizienter ist, und selbst mit dem hinzugefügtenif
Status ist dies immer noch weitaus effizienter, als wenn Sie "diesen Zweig entfernen". Ich verstehe den Kommentar von "Ich würde müde werden ..." nicht wirklich? Schreiben Sie es und vergessen Sie es. Sie müssen nur die Funktion aufrufen und nicht schreiben. :)setBaseAndExtent
es deutlich performanter wäre alsaddRange
. Warum sollte es sein? Mein anderer Kommentar bezog sich auf Ihr Feature-Test-Ethos, das auf alle DOM-Interaktionen ausgedehnt wurde: Es ist eine Menge Code, um jede einzelne DOM-Methode und -Eigenschaft zu testen, bevor Sie sie verwenden. Ich missbillige nicht; Ich bin nur froh, die Grenze zu ziehen und ein paar weitere Annahmen in meinem Code zu treffen.Eine aktualisierte Version, die in Chrome funktioniert:
http://jsfiddle.net/KcX6A/326/
quelle
Für jedes Tag kann man den gesamten Text innerhalb dieses Tags mit diesem kurzen und einfachen Code auswählen. Es markiert den gesamten Tag-Bereich mit gelber Farbe und wählt mit einem Klick den darin enthaltenen Text aus.
quelle
lepe - Das funktioniert super für mich danke! Ich habe Ihren Code in eine Plugin-Datei eingefügt und ihn dann in Verbindung mit jeder Anweisung verwendet, sodass Sie mehrere Pre-Tags und mehrere Links "Alle auswählen" auf einer Seite haben können und das richtige Pre zum Hervorheben ausgewählt wird:
quelle
Schauen Sie sich das Selection-Objekt (Gecko-Engine) und das TextRange-Objekt (Trident-Engine) an. Ich kenne keine JavaScript-Frameworks, die browserübergreifend unterstützt werden, aber ich habe auch nie danach gesucht Es ist möglich, dass sogar jQuery es hat.
quelle
Tims Methode funktioniert perfekt für meinen Fall - indem ich den Text in einem Div für IE und FF auswähle, nachdem ich die folgende Anweisung ersetzt habe:
mit den folgenden:
Der Text im div wird durch Klicken mit der folgenden jQuery-Funktion ausgewählt:
quelle
Hier ist eine weitere einfache Lösung, um den ausgewählten Text in Form einer Zeichenfolge zu erhalten. Sie können diese Zeichenfolge einfach verwenden, um ein untergeordnetes div-Element an Ihren Code anzuhängen:
quelle
Mein spezieller Anwendungsfall war die Auswahl eines Textbereichs innerhalb eines bearbeitbaren Bereichselements, der, soweit ich sehen konnte, in keiner der Antworten hier beschrieben ist.
Der Hauptunterschied besteht darin, dass Sie einen Knoten vom Typ
Text
an dasRange
Objekt übergeben müssen, wie in der Dokumentation von Range.setStart () beschrieben :Der
Text
Knoten ist der erste untergeordnete Knoten eines span-Elements. Um ihn zu erhalten, greifen SiechildNodes[0]
auf das span-Element zu. Der Rest ist der gleiche wie in den meisten anderen Antworten.Hier ein Codebeispiel:
Andere relevante Dokumentation: Bereichsauswahl
Document.createRange () window.getSelection ()
quelle
jQuery.browser.webkit
Zum "else if" für Chrome hinzugefügt . In Chrome 23 konnte dies nicht funktionieren.Dieses Skript wurde unten erstellt, um den Inhalt in einem
<pre>
Tag auszuwählen , das das enthältclass="code"
.quelle
Gemäß der jQuery-Dokumentation von
select()
:Es gibt Ihre Erklärung, warum die jQuery
select()
in diesem Fall nicht funktioniert.quelle