jQuery select事件仅限于textarea
和input:text
。有没有办法处理普通元素中的选择,例如<div>
?
答案 0 :(得分:3)
jQuery的select
事件包装了本机浏览器select
事件,该事件触发IE和WebKit中的任何选择,但仅用于其他浏览器中的输入和textareas。
此问题之前出现过几次:
你会看到许多类似于卢克的答案,但没有一个完全奏效。首先,您需要考虑键盘选择,以及编辑和上下文浏览器菜单中的“全选”选项。其次,通过查看选择文本来检查选择的更改并不完全可靠:如果用户在文档的其他位置选择相同的文本,则不会被选中。
这里有一些代码可以解决大多数问题,虽然没有轮询选择,但你无法从编辑和上下文菜单中选择“全部选择”。
var addSelectHandler = function(callback) {
var selectionChangeEventHandler;
if (typeof window.getSelection != "undefined" && typeof document.addEventListener != "undefined") {
var previouslySelected = null;
var rangesEqual = function(r1, r2) {
return r1.startContainer === r2.startContainer && r1.startOffset === r2.startOffset &&
r1.endContainer === r2.endContainer && r1.endOffset === r2.endOffset;
};
selectionChangeEventHandler = function() {
var sel = window.getSelection(), selectedRanges = [], range;
var changed = !previouslySelected || (sel.rangeCount != previouslySelected.length);
for (var i = 0, len = sel.rangeCount; i < len; ++i) {
range = sel.getRangeAt(0).cloneRange();
selectedRanges[i] = range;
if (!changed && !rangesEqual(range, previouslySelected[i])) {
changed = true;
}
}
previouslySelected = selectedRanges;
if (changed) {
callback();
}
};
document.addEventListener("mouseup", selectionChangeEventHandler, false);
document.addEventListener("keyup", selectionChangeEventHandler, false);
} else if (typeof document.selection != "undefined" && typeof document.attachEvent != "undefined") {
// This is IE, which fires a selectionchange event for any selection
document.attachEvent("onselectionchange", callback);
}
};
addSelectHandler(function() {
alert("Selection changed");
}
答案 1 :(得分:2)
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;
}
return txt;
}
$(document).mouseup(function() {
alert(getSelText());
});
我不知道jQuery是否有一个,但是这可以用来制作一个新的插件,你可以用鼠标连接一个事件。