Ist es möglich, den hervorgehobenen Text in einem Absatz einer Website abzurufen, z. B. mithilfe von jQuery?
Ist es möglich, den hervorgehobenen Text in einem Absatz einer Website abzurufen, z. B. mithilfe von jQuery?
Antworten:
Das Abrufen des vom Benutzer ausgewählten Textes ist relativ einfach. Durch die Einbindung von jQuery können Sie keinen Vorteil erzielen, da Sie nur die Objekte window
und benötigen document
.
function getSelectionText() {
var text = "";
if (window.getSelection) {
text = window.getSelection().toString();
} else if (document.selection && document.selection.type != "Control") {
text = document.selection.createRange().text;
}
return text;
}
Wenn Sie an einer Implementierung interessiert sind, die sich auch mit Auswahlen in <textarea>
und Textelementen befasst <input>
, können Sie Folgendes verwenden. Da es jetzt 2016 ist, lasse ich den Code weg, der für die IE <= 8-Unterstützung erforderlich ist, aber ich habe an vielen Stellen dafür Dinge auf SO gepostet.
function getSelectionText() {
var text = "";
var activeEl = document.activeElement;
var activeElTagName = activeEl ? activeEl.tagName.toLowerCase() : null;
if (
(activeElTagName == "textarea") || (activeElTagName == "input" &&
/^(?:text|search|password|tel|url)$/i.test(activeEl.type)) &&
(typeof activeEl.selectionStart == "number")
) {
text = activeEl.value.slice(activeEl.selectionStart, activeEl.selectionEnd);
} else if (window.getSelection) {
text = window.getSelection().toString();
}
return text;
}
document.onmouseup = document.onkeyup = document.onselectionchange = function() {
document.getElementById("sel").value = getSelectionText();
};
Selection:
<br>
<textarea id="sel" rows="3" cols="50"></textarea>
<p>Please select some text.</p>
<input value="Some text in a text input">
<br>
<input type="search" value="Some text in a search input">
<br>
<input type="tel" value="4872349749823">
<br>
<textarea>Some text in a textarea</textarea>
window.getSelection()
). Bei der document.selection.type
Prüfung wird geprüft, ob es sich bei der Auswahl eher um eine Textauswahl als um eine Steuerelementauswahl handelt. In IE ist eine Steuerelementauswahl eine Auswahl innerhalb eines bearbeitbaren Elements, das ein oder mehrere Elemente (z. B. Bilder und Formularsteuerelemente) mit Konturen und Ziehpunkten zur Größenänderung enthält. Wenn Sie eine .createRange()
solche Auswahl aufrufen , erhalten Sie ControlRange
eher eine als eine TextRange
und ControlRange
haben keine text
Eigenschaft.
selectionStart
oder selectionEnd
in einem <input>
Elementtyp (wie „Zahl“) , die nicht unterstütze es (siehe zum Beispiel jsfiddle.net/6zoposby/2 ). Ich habe den Scheck auf das Vorhandensein von verlassen, selectionStart
damit der Code im IE <= 8 nicht kaputt geht. Ich gebe zu, dass der Scheck für activeElement
jetzt wahrscheinlich übertrieben ist. Ich benutze es, slice
weil es leistungsfähiger ist (obwohl das hier nicht nützlich ist) und etwas kürzer zu tippen ist als substring
.
Erhalten Sie hervorgehobenen Text auf folgende Weise:
window.getSelection().toString()
und natürlich eine spezielle Behandlung für dh:
document.selection.createRange().htmlText
document.selection
Unterstützung in IE10 entfernt und durch window.getSelection
" ersetzt. Quelle: connect.microsoft.com/IE/feedback/details/795325/…
Diese Lösung funktioniert, wenn Sie Chrome verwenden (andere Browser können nicht überprüft werden) und wenn sich der Text im selben DOM-Element befindet:
window.getSelection().anchorNode.textContent.substring(
window.getSelection().extentOffset,
window.getSelection().anchorOffset)
Verwenden Sie window.getSelection().toString()
.
Sie können mehr auf developer.mozilla.org lesen