查看所选文本是否在输入字段或文本区域内
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
事件来自非 textarea
或 input
文本类型的元素时才会显示警报消息。
编辑代码:
$(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);
}
};
我正在创建一个 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
事件来自非 textarea
或 input
文本类型的元素时才会显示警报消息。
编辑代码:
$(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);
}
};