查看所选文本是否在输入字段或文本区域内

Find out if a selected text is inside a input field or textarea

我正在创建一个 chrome 扩展。

每当你 select 一个文本时,我都会在 selection 旁边的网页上添加两个按钮。

如果 selection 在文本区域或输入框内,我不希望发生任何操作。

这是我目前使用的代码

$(document).on("mouseup", function(e) {
    var class1=e.target.nodeName;
    var class2=e.target.firstChild;
    console.log(class1);
    console.log(class2);
    if(class1=="INPUT" || class1=="TEXTAREA"){
    }
    else{
    var selectedtext=window.getSelection().toString();
    var chars=selectedtext.length;
if(chars>2){
    var posx=e.clientX;
    var posy=e.clientY;
    var scrollDepth=$(window).scrollTop();
    posy=posy+scrollDepth;
    var location=findSelectionCoords(posx,posy);
    create_Button(location);
}
}
});

创建按钮函数用于创建按钮。

如果用户 select 在文本 area/input 框中添加了一些文本,此功能有效,控制台会显示 input/textarea。 但有时文本区域或输入框也会被 selected,然后此功能失败。在 class1 中,在这种情况下我得到 DiV。

有人可以建议一个在所有情况下都适用的函数,并检测文本 selection 是否在输入或文本区域中

提前致谢

这是示例代码,其中仅当 mouseup 事件来自非 textareainput 文本类型的元素时才会显示警报消息。

编辑代码:

$(function() {
    var isInputOrTextarea = false;
 $(document).on("mousedown", function(e) {
        // On mousedown flag whether it was clicked in input or textarea
        if($(e.target).is("textarea,input[type=text]")) {
            isInputOrTextarea = true;
        }
    });    
 $(document).on("mouseup", function(e) {
        if($(e.target).is("textarea,input[type=text]") || isInputOrTextarea) {
            isInputOrTextarea = false;
            return;
        }
        isInputOrTextarea = false;
        alert("Not in text area or input");
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="text" value="Lorem ipsum"/>
<textarea>
    Lorem ipsum
</textarea>
<p>
    Lorem ipsum
</p>
   

就在 javascript 中,这是一个如何从输入中清除事件的示例。这是一个班轮。

document.onkeydown = function (ev) {
  switch (ev.key) {
    case 'ArrowRight':
      if (!ev.shiftKey && ['INPUT','TEXTAREA'].indexOf(ev.srcElement.nodeName) == -1)
        advance();
      break;
    default:
      console.log(ev.key);
  }
};