Выбранный триггер текстового события в Javascript
Как вызвать функцию JavaScript, когда кто-то выделяет данный фрагмент текста на странице с помощью мыши?
Также есть ли способ найти положение выделенного текста на странице?
Обновление: чтобы быть более понятным, фрагмент текста может быть частью предложения или слова или фразы или целого абзаца.
Ответы
Ответ 1
Нет события "Текст был выбран" (DOM)
, но вы можете привязать событие mouseup
к document.body
. Внутри этого обработчика событий вы можете просто проверить
document.selection.createRange().text
или
window.getSelection()
методы. В Stackoverflow есть несколько тем, например этот javascript, чтобы получить абзац выделенного текста на веб-странице.
Я не уверен, что вы имеете в виду с "нахождением позиции", но чтобы остаться в моем примере мира, вы можете использовать позиции мыши event propertys
для X + Y.
Пример: http://www.jsfiddle.net/2C6fB/1/
Ответ 2
Здесь быстрый mashup:
$('div').mouseup(function() {
var text=getSelectedText();
if (text!='') alert(text);
});
function getSelectedText() {
if (window.getSelection) {
return window.getSelection().toString();
} else if (document.selection) {
return document.selection.createRange().text;
}
return '';
}
<div>Here is some text</div>
Демо: http://jsfiddle.net/FvnPS/11/
Ответ 3
Существует новый экспериментальный API, который имеет дело с этим:
Событие selectionchange API Selection запускается, когда изменяется объект выбора документа или когда изменяется выбор, связанный с <input>
или <textarea>
. Событие selectionchange вызывается для документа в первом случае, для элемента во втором случае.
https://developer.mozilla.org/en-US/docs/Web/Events/selectionchange
Обратите внимание, что это крайний край и не гарантированно будет работать даже в основных браузерах.
Ответ 4
Используйте следующий код:
(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);
}
})();
Это пример кода, который я использовал во время одного из моих заданий. Это сработало для меня.
Ответ 5
AFAIK, такого события вы не описали. Но вы можете эмулировать эту функцию.
Посмотрите здесь для кода и демонстрации.
Ответ 6
Есть событие "Текст был выбран". Но только для textarea, как я знал.
<textarea onselect="message()" name="summary" cols="60" rows="5">
请写入个人简介,不少于200字!
</textarea>
Ответ 7
var selectedText = "";
if (window.getSelection) {
selectedText = window.getSelection();
}
if (document.getSelection) {
selectedText = document.getSelection();
}
if (document.selection) {
selectedText = document.selection.createRange().text;
}
function textSelector() {
alert(selectedText);
}
textSelector();