就像我可以从document.elementFromPoint
或document.getElementFromPoint
得到一个元素,是否有可能以某种方式得到一个文本节点,如果该点在文本节点?我猜如果至少我可以得到文本节点的位置和大小,那么我可以找出它们中哪些包含这个点。但是,然后DOM节点没有位置属性。有没有可能做到这一点?从点获取DOM文本节点?
回答
这里的是,在目前所有的浏览器上运行的实现: https://github.com/nuxodin/q1/blob/master/q1.dom.js
document.betaNodeFromPoint = function(x, y){
var el = document.elementFromPoint(x, y);
var nodes = el.childNodes;
for (var i = 0, n; n = nodes[i++];) {
if (n.nodeType === 3) {
var r = document.createRange();
r.selectNode(n);
var rects = r.getClientRects();
for (var j = 0, rect; rect = rects[j++];) {
if (x > rect.left && x < rect.right && y > rect.top && y < rect.bottom) {
return n;
}
}
}
}
return el;
};
您可以使用element.nodeName
来查看它是否是文本节点,然后是element.nodeValue
的值。
我假设'getElementFromPoint'只返回s元素节点。 –
呵呵,是的,你是对的:https://developer.mozilla.org/en-US/docs/DOM/document.elementFromPoint指出'element必须是一个元素对象'(这是一种不同于XML的类型)文本对象) – Ben
考虑到这个文件(fiddle):
<html>
<body>
some text here
<p id="para1">lalala</p>
bla bla
</body>
</html>
而这种代码:
$(document).on('click', function(evt) {
var elem = document.elementFromPoint(evt.clientX, evt.clientY);
console.log(elem);
});
当你点击<p>
标签内的任何地方,标签元素本身被记录。但是,单击周围的文本时,将返回<body>
,因为文本片段不被视为元素。
结论
这是不可能做到你想要什么elementFromPoint()
因为文字片段没有收到点击事件,我不认为这是可能的。
对于Firefox,你应该使用document.caretPositionFromPoint
这里有一个greap演示:https://developer.mozilla.org/en-US/docs/Web/API/document.caretPositionFromPoint
Chrome和边缘,尝试document.caretRangeFromPoint(x,y)
唉,这是一个Firefox特定功能:-( – Michael
@迈克尔耶为其他浏览器,请尝试document.caretRangeFromPoint(x,y) –
- 1. 通过文本获取dom节点
- 2. 在DOM中获取文本节点值
- 3. 获取DOM节点
- 4. 从DOM获取根节点文档类
- 5. PHP DOM文档获取节点信息
- 6. 更改DOM文本节点
- 7. html dom文本节点
- 8. 获取xml节点文本
- 9. 获取文本节点
- 10. XSLT - 获取文本()节点
- 11. 从javascript dom文本节点替换
- 12. 无法从XML节点获取文本
- 13. TinyXML2从节点和所有子节点获取文本
- 14. DOM:获取文档中的所有文本节点(PHP)
- 15. 无法获取DOM节点值提取
- 16. 获取节点上的节点文本点击TAdvTreeview delphi
- 17. 如何使用php获取特定的节点文本DOM
- 18. 使用Java获取XML节点文本值DOM
- 19. 在PHP中获取节点的文本DOM
- 20. 从父节点获取img节点
- 21. 使用jQuery获取DOM中的节点节点
- 22. Chrome Headless:获取仅有可见节点的DOM节点
- 23. 规范文档:DOM文本节点
- 24. DOM XML - 如何获取子节点?
- 25. componentDidMount获取DOM节点出错
- 26. 使用webEngine.executeScript()获取DOM节点的innerHTML?
- 27. 用PHP DOM获取子节点的值
- 28. 在文本节点中获取锚点中的文本
- 29. 从JCR文件节点获取文件
- 30. 如何使用PHP简单DOM解析器获取节点的文本而不使用儿童文本节点
好极了,我刚刚写完这个确切的函数〜哦,:) :)我的upvote计算出'createRange'部分,花了我几分钟才打到我:P –
谢谢!你是最好的:) –