如何在光标下获取单词?

时间:2010-10-04 12:45:26

标签: javascript jquery

假设整个文档附加了mousestop事件,那么在光标下找出确切的最佳方法是什么(如果有任何文本),鼠标停止移动?

我可以从事件处理程序中获取底层(jQuery)元素 - $(document.elementFromPoint(e.clientX, e.clientY)) - 但接下来是什么?

到目前为止,我的想法是将hit元素中的所有文本节点替换为其中每个单词都包含在DOM元素中的副本(不知道哪个单词),然后再次调用$(document.elementFromPoint(e.clientX, e.clientY))来获取元素只包含鼠标下的单词。
但这似乎是一个复杂的计划,我想知道我是否遗漏了一些更简单的东西。

2 个答案:

答案 0 :(得分:2)

嗯,到目前为止还没有任何魔术技巧,所以这里是沉闷乏味(但仍然有效)的解决方案:

  $(document.body).mousemove(function(e){

    var onmousestop = function() {
      function getHitWord(hit_elem) {
        var hit_word = '';
        hit_elem = $(hit_elem);

        //text contents of hit element
        var text_nodes = hit_elem.contents().filter(function(){
          return this.nodeType == Node.TEXT_NODE && this.nodeValue.match(/[a-zA-Z]{2,}/)
        });

        //bunch of text under cursor? break it into words
        if (text_nodes.length > 0) {
          var original_content = hit_elem.clone();

          //wrap every word in every node in a dom element
          text_nodes.replaceWith(function(i) {
            return $(this).text().replace(/([a-zA-Z-]*)/g, "<word>$1</word>")
          });

          //get the exact word under cursor
          var hit_word_elem = document.elementFromPoint(e.clientX, e.clientY);

          if (hit_word_elem.nodeName != 'WORD') {
            console.log("missed!");
          }
          else  {
            hit_word = $(hit_word_elem).text();
            console.log("got it: "+hit_word);
          }

          hit_elem.replaceWith(original_content);
        }

        return hit_word;
      }

      var hit_word = getHitWord(document.elementFromPoint(e.clientX, e.clientY));
      ...
    }
  }

还有其他一些细微之处(比如事件'降噪',保持更换dom环境(例如选择)等等),但你明白了。

Here您可以了解如何设置mousestop事件。

修改

制作自定义html元素可能不是IE中的那种前沿(谁会想到?)。查看更多here

答案 1 :(得分:1)

我没有任何代码,但也许这可能有点帮助:

  1. 当光标处于空闲状态时,获取坐标
  2. 在上述坐标中搜索页面中的元素
  3. 使用var s = getElementById('ElementIDFoundinStepAbove').innerHTML;
  4. 之类的内容

    这似乎是一种相当合理的方法,但是,我不知道这是否可能。

    <小时/> 修改

    我刚在S / O上发现这篇文章:

    2444430

    我希望这会有所帮助。

    :)

    杰森