我想知道是否有人在我的页面上选择了文本,因此我可以在光标所在的位置显示上下文菜单。但是我只想通过双击文本选择文本来显示它。这可能吗?
我认为这是可能的,因为同样的事情发生在I.E中,带有蓝色加速按钮的东西。
答案 0 :(得分:2)
这不够吗?
如果您不想关注链接,请输入以下代码:
<div id="target">
Double-click here
</div>
<script type="text/javascript">
$('#target').dblclick(function() {
alert('Handler for .dblclick() called.');
});
</script>
答案 1 :(得分:1)
我不确定双击的事情。
但在IE中,我相信它是document.selection
我知道在Chrome中它是document.getSelection()
。
这将返回一个选择范围对象。
一些轻读:答案 2 :(得分:1)
适用于大多数浏览器的更强大的解决方案:
<div ondblclick="checkForSelectedText(this)">here is some text</div>
<script type="text/javascript">
function checkForSelectedText() {
var d = document;
var t;
// Modern browsers, including IE 6+
if (d && d.selection && d.selection.createRange) {
t = d.selection.createRange().text;
alert('createRange supported\n' + t);
// Others
} else if (d.getSelection) {
t = d.getSelection();
alert('getSelection supported\n' + d.getSelection());
}
return t;
}
</script>
但是在textarea之类的元素或大多数浏览器的输入中都不起作用。这是一个更通用的版本:
<div ondblclick="checkForSelectedText(event)">here is some text
<input value="and some inside an input">
<textarea>Lorem ipsum in a textarea</textarea>
</div>
<script type="text/javascript">
function checkForSelectedText(e) {
var el = e.target || e.srcElement;
var tagName = el.tagName && el.tagName.toLowerCase();
var t;
var d = document;
// Try DOM 2 Range - most browsers, including IE 6+
if (d && d.selection && d.selection.createRange) {
t = d.selection.createRange().text;
alert('createRange supported\n' + t);
// Otherwise try HTML5 - note that getSelection returns
// a string with extra properties
} else if (d.getSelection) {
t = d.getSelection();
alert('getSelection supported\n' +
'\n' + t);
}
// If didn't get any text, see if event was inside
// inupt@type=text or textarea
if (t == '') {
if (tagName == 'textarea' ||
(tagName == 'input' && el.type == 'text')) {
t = el.value.substring(el.selectionStart, el.selectionEnd)
alert('Inside ' + tagName + '\n' + t);
}
}
return t;
}
</script>
表单控件中的情况可能需要更多的工作,可能应该有selectionStart和selectionEnd的测试。