就像我可以从document.elementFromPoint或document.getElementFromPoint得到一个元素,是否可能以某种方式获取文本节点,如果点在文本节点?我猜,如果至少我可以得到文本节点的位置和大小,我可以找出它们中的哪一个包含该点.但是,DOM节点没有位置属性.有可能这样做吗?
解决方法
这是一个在所有当前浏览器中可用的实现:
https://github.com/nuxodin/q1/blob/master/q1.dom.js
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; };