Sto scrivendo un addon di Firefox che viene attivato ogni volta che una parola viene evidenziata. Tuttavia ho bisogno di uno script che rilevi quando viene evidenziata una parola, e sono bloccato. Un esempio potrebbe essere nytimes.com (quando leggi un articolo e evidenzi una parola, viene visualizzata l'icona di riferimento). Tuttavia, lo script di nytimes.com è super complesso. Ho 16 anni e non un gran programmatore, quindi è decisamente fuori dalla mia portata.Javascript: Come rilevare se una parola è evidenziata
risposta
Ecco uno script:
<script language=javascript>
function getSelText()
{
var txt = '';
if (window.getSelection)
{
txt = window.getSelection();
}
else if (document.getSelection)
{
txt = document.getSelection();
}
else if (document.selection)
{
txt = document.selection.createRange().text;
}
else return;
document.aform.selectedtext.value = txt;
}
</script>
<input type="button" value="Get selection" onmousedown="getSelText()">
<form name=aform >
<textarea name="selectedtext" rows="5" cols="20"></textarea>
</form>
Per gentile concessione di Codice Toad:
http://www.codetoad.com/javascript_get_selected_text.asp
Nel tuo caso, si vorrebbe chiamare questo script quando la selezione è fatta, e poi si può elaborarlo come preferisci, con una richiesta AJAX per ottenere informazioni rilevanti, ad esempio, come probabilmente accade a NYTIME.
Il modo più semplice per eseguire questa operazione è rilevare gli eventi mouseup
e keyup
sul documento e controllare se è selezionato alcun testo. Quanto segue funzionerà in tutti i principali browser.
Esempio: http://www.jsfiddle.net/timdown/SW54T/
function getSelectedText() {
var text = "";
if (typeof window.getSelection != "undefined") {
text = window.getSelection().toString();
} else if (typeof document.selection != "undefined" && document.selection.type == "Text") {
text = document.selection.createRange().text;
}
return text;
}
function doSomethingWithSelectedText() {
var selectedText = getSelectedText();
if (selectedText) {
alert("Got selected text " + selectedText);
}
}
document.onmouseup = doSomethingWithSelectedText;
document.onkeyup = doSomethingWithSelectedText;
Ma cosa succede se vuoi rilevare se una parola specifica è selezionata? Supponi di avere 'pippo' sulla pagina più volte e l'utente seleziona' pippo' come fai a sapere quali parole l'utente ha selezionato? – Jespertheend
Utilizzando rangy.js e jQuery:
$('#elem').on('keyup mouseup', function(){
var sel = rangy.getSelection()
if (sel.rangeCount === 0 || sel.isCollapsed) return
alert(sel.toString())
})
Usa seguente codice
(function() {
"use strict";
var showSelectedText = function (e) {
var text = '';
if (window.getSelection) {
text = window.getSelection();
} else if (document.getSelection) {
text = document.getSelection();
} else if (document.selection) {
text = document.selection.createRange().text;
}
console.log(text.toString());
}
document.onmouseup = showSelectedText;
if (!document.all) {
document.captureEvents(Event.MOUSEUP);
}
})();
continuo a vedere questo codice su SO, ed è sbagliato: 'finestra. getSelection() 'restituisce un oggetto' Selection', non una stringa. –
@tim, non tutta la verità. L'oggetto ha un metodo toString(). Quando è prevista una stringa, viene restituita una stringa, altrimenti, come si indica, viene restituito un oggetto. https://developer.mozilla.org/en-US/docs/Web/API/Window/getSelection –
@TedCohen: È vero che un oggetto 'Selection' ha un'implementazione sensibile' toString() 'ma il resto del tuo il commento non ha senso: un oggetto 'Selection' viene sempre restituito se' window.getSelection' esiste (cosa che fa in tutti i browser moderni). –