如何判断用户是否在我的页面上选择了文本

时间:2011-04-18 01:43:50

标签: javascript jquery html css

我想知道是否有人在我的页面上选择了文本,因此我可以在光标所在的位置显示上下文菜单。但是我只想通过双击文本选择文本来显示它。这可能吗?

我认为这是可能的,因为同样的事情发生在I.E中,带有蓝色加速按钮的东西。

3 个答案:

答案 0 :(得分:2)

这不够吗?

http://jsfiddle.net/cLY8r/

如果您不想关注链接,请输入以下代码:

<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的测试。