gpt4 book ai didi

javascript - 检测在文本中右键单击了哪个词

转载 作者:行者123 更新时间:2023-11-28 05:17:22 25 4
gpt4 key购买 nike

对于我的应用程序,我想在有人右键单击时显示自定义上下文菜单。如果右键单击任何单词,我想为它显示一些额外的选项。我在网上查找并找到了有关如何在左键单击时获取单词的解决方案,我尝试修改它以进行右键单击,但不知何故无法正常工作。

下面的代码,在左键单击时会显示带有单词的警报,而在右键单击时它会显示相同的警告。但有时它不显示任何弹出窗口,当它在弹出窗口中显示上一个右键单击的单词时。

$('.text123').click(function(e){
s = window.getSelection();
var range = s.getRangeAt(0);
var node = s.anchorNode;
while(range.toString().indexOf(' ') != 0) {
range.setStart(node,(range.startOffset -1));
}
range.setStart(node, range.startOffset +1);
do{
range.setEnd(node,range.endOffset + 1);
}while(range.toString().indexOf(' ') == -1 && range.toString().trim() != '');
var str = range.toString().trim();
alert(str);
});

$(".text123").mouseup(function(){
var e = window.event;
if (e.button == 2)
{
jQuery(document.elementFromPoint(e.pageX, e.pageY)).click();
}
});

我正在 Edge 浏览器上进行测试,因为我想在 UWP 应用程序中使用代码。

最佳答案

经过一些搜索和测试,这似乎适用于 EDGE。

JSFiddle demo.

这是主要的变化:

$(".text123").on('contextmenu', function(evt){
evt.preventDefault(); // with this the context menu will not open
var e = window.event;
if (e.button == 2) {
/* START - And this make the selection before emulate the left click */
var range = document.caretRangeFromPoint(e.pageX, e.pageY);
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
/* END */
jQuery(document.elementFromPoint(e.pageX, e.pageY)).click();
}
});

更新

本次更新是为了解决滚动页面问题和首尾选词错误。

The new JSFiddle.

$('.text123').click(function(e) {
s = window.getSelection();
var range = s.getRangeAt(0);
var node = s.anchorNode;

// ### && range.startOffset != 0 <--- This check very first char
while (range.toString().indexOf(' ') != 0 && range.startOffset != 0) {
range.setStart(node, (range.startOffset - 1));
}
range.setStart(node, range.startOffset + 1);


do {
range.setEnd(node, range.endOffset + 1);
} while (range.toString().indexOf(' ') == -1 && range.toString().trim() != '' && range.endOffset < range.endContainer.length);
// ### && range.endOffset < range.endContainer.length <--- This check the last char

var str = range.toString().trim();

alert(str);
});


$(".text123").on('contextmenu', function(evt) {
evt.preventDefault();
var e = window.event;
if (e.button == 2) {
// ### - $(document).scrollTop() <--- This will fix the page scroll
var range = document.caretRangeFromPoint(e.pageX, e.pageY - $(document).scrollTop());
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
// ### - $(document).scrollTop() <--- This will fix the page scroll
jQuery(document.elementFromPoint(e.pageX, e.pageY - $(document).scrollTop())).click();
}
});

关于javascript - 检测在文本中右键单击了哪个词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43571090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com