Как мне прикрепить событие «select» к каждому текстовому узлу на странице? Есть ли способ лучше? - PullRequest
2 голосов
/ 06 августа 2009

ПРИМЕЧАНИЕ: похоже, я решил собственную проблему. Смотрите правки.

Я пытаюсь написать скрипт greasemonkey, который подсвечивает все соответствующие тексты на странице, когда пользователь выбирает текст, а затем удаляет выделение, когда выбор отменяется. Я ищу JQuery способ сделать это. Кажется, что в ядре jQuery есть событие select, но я не мог заставить его работать так, как я хотел. Попробуйте выполнить следующее на этой странице, например:

$(document).select(function () { 
      console.log("hey");
  });

Нет ответа. Так что, похоже, мне нужно прикрепить это к текстовым узлам в частности. Но это не кажется мне практичным. Это было бы слишком медленно.

Есть предложения, идеи? Спасибо.

EDIT # 1: Кен Браунинг указал, что событие выбора в jQuery запускается только в текстовой области и полях ввода. Так что я думаю, что должен отказаться от этого. Может быть, я могу немного изменить свой вопрос и спросить, может ли кто-нибудь сказать мне способ javascript, чтобы привязать события выделения ко всем текстовым узлам.

РЕДАКТИРОВАТЬ # 2: Я думаю, что нашел часть моего ответа. Это возвращает выбранный текст на странице, но вам все равно нужно нажать кнопку, чтобы показать его. Нет привязки события select. Гектометр

<script language=javascript>
function getSelText()
{
    var txt = '';
     if (window.getSelection)
    {
        txt = window.getSelection();
             }
    else if (document.getSelection)
    {//javascript select event
        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()"> 

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

РЕДАКТИРОВАТЬ # 3: ТАК Я привязан к событию mouseup, а не к выделению. Затем я проверяю значение getSelText (), чтобы продолжить после этой точки. Ура!

РЕДАКТИРОВАТЬ # 4: Если кому-то интересно, я разместил свой готовый сценарий в скриптах пользователя. Вот ссылка. Наслаждайтесь!

http://userscripts.org/scripts/show/55148

Ответы [ 2 ]

3 голосов
/ 06 августа 2009

В Firefox document.getSelection() вернет выделенный текст.

Вы можете присоединить обработчик onmouseup к document и проверять выбор каждый раз, когда получаете событие mouseup.

Примечание. После того, как я написал это, вы опубликовали исходный код, чтобы получить выбор. Хотя этот код в порядке (и кросс-браузер), если вы используете Greasemonkey, вы должны быть в Firefox, поэтому все, что вам нужно, это document.getSelection().

1 голос
/ 06 августа 2009

Событие select срабатывает, когда пользователь выделяет текст в текстовом поле, включая ввод и текстовую область.

Я прочитал это, чтобы означать, что вы ошиблись событием, если содержание вашей страницы не в <input type="text"> или <textarea>

...