2009-08-06 1 views
2

ПРИМЕЧАНИЕ: Я решил, что проблема моя. См. Правки.Как подключить событие «select» к каждому текстовому узлу на странице? Есть ли способ лучше?

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

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

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

Любые предложения, идеи? Благодарю.

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

EDIT # 2: Я думаю, что нашел часть своего ответа. Это возвращает выделенный текст на странице, но вы все равно должны нажать кнопку, чтобы показать его. Не существует привязки выбранного события. Гектометр

<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

EDIT # 3: SO я привязан к событию MouseUp, а не выбора. Затем я проверяю значение getSelText(), чтобы продолжить дальше после этой точки. Ура!

EDIT # 4: В случае, если кому-то интересно, я разместил мой готовый скрипт в Usercripts. Ссылка здесь. Наслаждайтесь!

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

ответ

3

В Firefox, document.getSelection() возвращает выделенный текст.

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

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

+0

удивительный. Спасибо за информативный комментарий. – picardo

+0

if (document.selection && document.selection.createRange) selectText = document.selection.createRange(). Text; // IE - не то, что нужно для greasemonkey, но может быть удобно – gnarf

1

ВЫБРАТЬ пожары событий, когда пользователь выбирает какой-нибудь текст в текстовом поле ввода, в том числе и текстового поля.

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

+0

ах. Я этого не заметил. Благодарю. – picardo