È possibile ottenere il testo evidenziato in un paragrafo di un sito Web, ad esempio utilizzando jQuery?
È possibile ottenere il testo evidenziato in un paragrafo di un sito Web, ad esempio utilizzando jQuery?
Risposte:
Ottenere il testo selezionato dall'utente è relativamente semplice. Non c'è alcun vantaggio da ottenere coinvolgendo jQuery poiché non è necessario altro che gli oggetti window
e 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;
}
Se sei interessato a un'implementazione che tratterà anche delle selezioni <textarea>
e degli <input>
elementi texty , puoi utilizzare quanto segue. Dal momento che è ora 2016 sto omettendo il codice richiesto per il supporto IE <= 8, ma ho pubblicato cose per questo in molti posti su SO.
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()
). Il document.selection.type
controllo sta verificando che la selezione sia una selezione di testo anziché una selezione di controllo. In IE, una selezione di controllo è una selezione all'interno di un elemento modificabile contenente uno o più elementi (come immagini e controlli modulo) con contorni e maniglie di ridimensionamento. Se si chiama .createRange()
tale selezione, si ottiene un ControlRange
anziché un TextRange
e ControlRange
non hanno text
proprietà.
selectionStart
o selectionEnd
in un <input>
tipo di elemento (come "numero") che non supportalo (vedi jsfiddle.net/6zoposby/2 , per esempio). Ho lasciato il controllo per l'esistenza di in selectionStart
modo che il codice non si interrompa in IE <= 8. Ammetto che il controllo per activeElement
è probabilmente eccessivo ora. Uso slice
perché è più potente (anche se non è utile qui) e leggermente più breve da digitare di substring
.
Ottieni il testo evidenziato in questo modo:
window.getSelection().toString()
e ovviamente un trattamento speciale per es .:
document.selection.createRange().htmlText
document.selection
supporto è stato rimosso in IE10 e sostituito con window.getSelection
". Fonte: connect.microsoft.com/IE/feedback/details/795325/…
Questa soluzione funziona se stai utilizzando Chrome (impossibile verificare altri browser) e se il testo si trova nello stesso elemento DOM:
window.getSelection().anchorNode.textContent.substring(
window.getSelection().extentOffset,
window.getSelection().anchorOffset)
Usa window.getSelection().toString()
.
Puoi leggere di più su developer.mozilla.org