在html中的屏幕坐标(x,y)处选择一个单词

Posted

技术标签:

【中文标题】在html中的屏幕坐标(x,y)处选择一个单词【英文标题】:select a single word at a screen coordinate (x, y) in html 【发布时间】:2015-11-05 19:17:13 【问题描述】:

我想知道是否有办法通过提供屏幕坐标 (x,y) 来选择 html 中的单个单词。基本上我想要一个自定义的window.getSelection,但不是由光标(或触摸)触发,而是输入(x,y)点。谢谢。

【问题讨论】:

您可以使用 .offSet() 函数。 api.jquery.com/offset @Anonymous0day,elementFromPoint() 只给了我整个元素,而不是一个特定的词。 你是对的! @DinoMyte 你能解释一下吗?如何使用 offset() 获取选定的单词?谢谢 我再试一次:你必须使用caretPositionFromPoint 【参考方案1】:

一个BASIC解决方案可能是这样的:(单词的检测严格基于一个空格'')! 仅用于演示目的,编码和非字母字符超出范围!

var $j = function(val, space) return JSON.stringify(val, '', space || '');;
var $l = function(val) document.body.insertAdjacentHTML('beforeend', '<div><pre>' + val + '</pre></div>');
$lj = function(val, space) $l($j(val, space));;





function getWordAtPosition(x,y)
  var caretPosition = document.caretPositionFromPoint( x , y );

  var str = caretPosition.offsetNode.data;
  var len = caretPosition.offsetNode.length;
  var pos = caretPosition.offset;
  
  var result = 
    function: 'getWordAtPosition( ' + x + ' , ' + y + ')' ,
    x       : x ,
    y       : y ,
    data    : str ,
    startAt : pos ,
    endAt   : pos ,
    curChar : str[pos] ,
  ;
  
    
    
    if(!result.curChar) return result;
    if( result.curChar === " ") return result;
    
    
    while(pos>=0 && str[pos]!==' ') pos--;
    result.startAt = pos+1;
    
    var endAt = str.indexOf(' ' , result.startAt);
    endAt = endAt === -1 || endAt === result.startAt ? len-1 : endAt-1;
    result.endAt = endAt;
    
    result.word = str.substring(result.startAt , result.endAt+1);
  
  $lj( result , ' ');




document.onclick = function(evt) 
  
  getWordAtPosition(evt.clientX, evt.clientY);

;
Click anywhere in this document.
<div>
  <p>Testing my code here</p>
</div>

【讨论】:

感谢 Anonymous0day。感谢您的回答,但 caretPositionFromPoint(或 elementFromPoint())是否必须绑定到事件? 没必要!看我的例子,我只是从事件中获取指针坐标,然后将它们传递给函数!您可以在没有事件的情况下使用该函数,在输出中我添加了应该使用坐标调用的函数,如果您在调试器中尝试它,您将在没有事件的情况下获得相同的结果 如果您使用我的测试用例,您可以调用该函数以使用getWordAtPosition( 98 , 15); 获取“任何地方”一词,而无需任何事件

以上是关于在html中的屏幕坐标(x,y)处选择一个单词的主要内容,如果未能解决你的问题,请参考以下文章

Flex Datagrid - 如何获取鼠标 x/y 坐标的项目?

在 R 中矩阵的 x、y 坐标处分配向量

堆栈图中选择条的 X 和 Y 坐标

在任意 X 坐标处确定 B 样条的值

获取一个单词的坐标

如何在 kivy 中设置网格布局的位置(x,y 坐标)?