2013-08-26 63 views
9

所以我在我的Rails应用程序中有一个可以理解的div,当它突出显示时,需要能够在文本上方显示一个小的弹出窗口。目前我的代码有效,并在警报中显示突出显示的文本。但是,该函数在mouseup上执行,因此当您单击div以开始键入或突出显示时,会引发空警报。在ContentEditable DIV中获取所选文本?

这里是我的代码:

function getSelected() { 
      if (window.getSelection) { 
       return window.getSelection(); 
      } 
      else if (document.getSelection) { 
       return document.getSelection(); 
      } 
      else { 
       var selection = document.selection && document.selection.createRange(); 
       if (selection.text) { 
        return selection.text; 
       } 
       return false; 
      } 
      return false; 
     }; 
$("#content-create-partial").bind("mouseup", function(){ 
       var text = getSelected(); 
       if(text) { 
        console.log(text); 
       } 
       else{ 
        console.log("Nothing selected?"); 
       }; 
      }); 

如何以免jQuery当用户点击执行功能到CONTENTEDITABLE DIV?我只希望它在实际文本突出显示时执行。

回答

-2

只是检查,如果选择为空:if ($.trim(text) != '') ...

0

有“选择开始”事件,当用户开始选择的时候触发。没有选择结束事件,但您可以在“selectstart”事件触发后侦听mouseup事件以确保选择已经发生。

编辑:

检查 - HTML Content Editable div: select text event

2

您可以比较window.getSelection().anchorOffsetwindow.getSelection().extentOffset,看看它们是否相等。如果他们是,那么这只是一个正常的点击。

1

如果没有选择任何内容,以下代码将返回true。

受@Tarun Dugar启发。但在所有浏览器中都不起作用。以下工作。

window.getSelection().focusOffset == window.getSelection().anchorOffset; 
相关问题