Javascript: как определить, выделено ли слово - PullRequest
46 голосов
/ 17 января 2011

Я пишу аддон Firefox, который запускается при выделении слова. Однако мне нужен скрипт, который определяет, когда слово выделено, и я застрял. Примером может служить nytimes.com (когда вы читаете статью и выделяете слово, всплывает значок ссылки). Однако скрипт nytimes.com очень сложный. Мне 16 лет, и я не очень программист, так что это определенно выход из моей лиги.

Ответы [ 3 ]

70 голосов
/ 17 января 2011

Самый простой способ сделать это - обнаружить события mouseup и keyup в документе и проверить, выделен ли какой-либо текст. Следующее будет работать во всех основных браузерах.

Пример: 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;
3 голосов
/ 17 января 2011

Вот скрипт:

<script>
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>

Предоставлено Code Toad:

http://www.codetoad.com/javascript_get_selected_text.asp

В вашем случае вы захотите вызвать этот скрипт, когдавыбор сделан, и затем вы можете обработать его, как пожелаете, с помощью запроса AJAX, например, для получения соответствующей информации, как, вероятно, делает NYtimes.

0 голосов
/ 13 февраля 2017

Использование rangy.js и jQuery:

$('#elem').on('keyup mouseup', function(){
    var sel = rangy.getSelection()
    if (sel.rangeCount === 0 || sel.isCollapsed) return
    alert(sel.toString())
})
...