возможно ли, что, когда пользователь выбрал какой-либо текст (не textarea или input), jquery может вызвать мой обратный вызов, чтобы сообщить мне, какой div-текст выбран, а если фокус выбора потерян, также вызовите мой обратный вызов?
Спасибо.
возможно ли, что, когда пользователь выбрал какой-либо текст (не textarea или input), jquery может вызвать мой обратный вызов, чтобы сообщить мне, какой div-текст выбран, а если фокус выбора потерян, также вызовите мой обратный вызов?
Спасибо.
Несколько удивительно, что нет простого способа сделать это. IE имеет выбрать событие, которое реализовано на всех элементах, но другие браузеры никогда не расширили это за пределы ввода. Вам придется обрабатывать события keyup
и mouseup
на весь документ, и даже тогда ваш обратный вызов может быть вызван, когда выбор не изменился.
ОБНОВЛЕНИЕ 13 ОКТЯБРЯ 2013 ГОДА
Браузеры WebKit поддерживали событие selectionchange
на узлах Document
в течение нескольких лет. IE также поддерживает это событие до версии 5.5. Пример:
document.onselectionchange = function() {
console.log("Selection changed");
};
Вот простой пример:
function selectCallback(selectionParentElement) {
console.log("Selecting, parent element is " + selectionParentElement.nodeName);
}
var mouseOrKeyUpHandler;
if (typeof window.getSelection != "undefined") {
// Non-IE
mouseOrKeyUpHandler = function() {
var sel = window.getSelection();
if (sel.rangeCount > 0) {
var range = sel.getRangeAt(0);
if (range.toString()) {
var selParentEl = range.commonAncestorContainer;
if (selParentEl.nodeType == 3) {
selParentEl = selParentEl.parentNode;
}
selectCallback(selParentEl);
}
}
};
} else if (typeof document.selection != "undefined") {
// IE
mouseOrKeyUpHandler = function() {
var sel = document.selection;
if (sel.type == "Text") {
var textRange = sel.createRange();
if (textRange.text != "") {
selectCallback(textRange.parentElement());
}
}
};
}
document.onmouseup = mouseOrKeyUpHandler;
document.onkeyup = mouseOrKeyUpHandler;
вы можете использовать this
использовать <ELEMENT ondrag = "handler(event);" >
object.addEventListener( "drag", handler, bCapture);