为了账号安全,请及时绑定邮箱和手机立即绑定

请问如何使用JavaScript获取光标下的单词?

请问如何使用JavaScript获取光标下的单词?

富国沪深 2019-10-21 16:12:26
如何使用JavaScript获取光标下的单词?如果我有<p> some long text </p>在我的HTML页面上,我如何知道鼠标的光标就在‘text’这个词的上方?
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

我的另一个答案只适用于Firefox。这个答案适用于Chrome。(我不知道火狐也能用。)

function getWordAtPoint(elem, x, y) {
  if(elem.nodeType == elem.TEXT_NODE) {
    var range = elem.ownerDocument.createRange();
    range.selectNodeContents(elem);
    var currentPos = 0;
    var endPos = range.endOffset;
    while(currentPos+1 < endPos) {
      range.setStart(elem, currentPos);
      range.setEnd(elem, currentPos+1);
      if(range.getBoundingClientRect().left <= x && range.getBoundingClientRect().right  >= x &&
         range.getBoundingClientRect().top  <= y && range.getBoundingClientRect().bottom >= y) {
        range.expand("word");
        var ret = range.toString();
        range.detach();
        return(ret);
      }
      currentPos += 1;
    }
  } else {
    for(var i = 0; i < elem.childNodes.length; i++) {
      var range = elem.childNodes[i].ownerDocument.createRange();
      range.selectNodeContents(elem.childNodes[i]);
      if(range.getBoundingClientRect().left <= x && range.getBoundingClientRect().right  >= x &&
         range.getBoundingClientRect().top  <= y && range.getBoundingClientRect().bottom >= y) {
        range.detach();
        return(getWordAtPoint(elem.childNodes[i], x, y));
      } else {
        range.detach();
      }
    }
  }
  return(null);}

在你的Mousemove处理程序中,打电话getWordAtPoint(e.target, e.x, e.y);



查看完整回答
反对 回复 2019-10-22
  • 3 回答
  • 0 关注
  • 310 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信