我开发了 chrome 扩展,当鼠标悬停在这个词上时,我需要获取任何网页的词。我不想将所有单词都放到特定的容器中,然后通过 id 获取。例如,如果我<p>The weather is very good today</p>
想将鼠标悬停在单词“very”上并将其放入我的 js 中(例如,alert('very')
)。
问问题
261 次
1 回答
3
我想向您展示此功能的概念证明。它非常幼稚和弱,但表明使用适当的正则表达式是可能的。基本上,将鼠标悬停在绿色边框的 div 上即可查看结果。
使用这种方法,每个段落都使用正则表达式分割成多个块。当然,正则表达式越强大,结果就越好。然后,onmousemove
正在冒泡,被跨度触发。读取 span 的内容是小菜一碟。
这种方法非常具有侵入性,通过修改您可能不想接触的 DOM 结构。它虽然在普通的 JS 中工作。更高级(仍然很简单)的方法如下:
- 不要碰任何段落。
- 观察
onmousemove
鼠标下的段落。 - 保存
clientX
和clientY
。 - 复制段落,使其透明和
position: absolute
. - 在副本上做这
spanify()
件事。 - 使用document.elementFromPoint查找悬停的跨度。使用已保存 (3.)
clientX
并clientY
移动副本的位置(左,上)。 - 你有跨度。你已经得到了它的内容。
- 从 DOM 中删除段落副本。
这个 hack 仍然适用于普通的 JS。快乐编码!;)
于 2012-12-04T23:15:06.217 回答