在 JavaScript 中查找两个 DOM 节点的第一个公共父节点的最佳方法是什么?
我的问题正是如此,但在上下文中我想检查选择对象,比较锚节点和焦点节点,如果它们不同,则找到第一个公共父元素。
var selected = window.getSelection();
var anchor = selection.anchorNode;
var focus = selection.focusNode;
if ( anchor != focus ) {
// find common parent...
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
由于这个问题和接受的答案非常过时,我建议使用更现代的 DOM API,范围:
Since this question and accepted answer are very dated, I'd like to suggest using a more modern DOM API, Range:
我会尝试这样的事情,假设没有 JS 库:
使用这个实用程序:
然后你可以调用findFirstCommonAncestor(myElementA,myElementB)。
I would try something like this, assuming no JS library:
using this utilities:
Then you can call
findFirstCommonAncestor(myElementA, myElementB)
.这种方式相当简单:
循环遍历一个的
parents()
元素并使用parents()
中>index() 直到找到匹配项(或未找到匹配项)。This way is fairly straightforward:
Loop through the
parents()
of one element and see if they are contained in theparents()
of the other usingindex()
until you find a match (or not).// 看起来应该相当简单,即使没有库或indexOf
// It seems like it should be fairly simple, even without a library or indexOf
有一个很好的 DOM API 可以做到这一点: compareDocumentPosition
事情是这样的:
There is a a good bit of DOM API for that: compareDocumentPosition
This is how it goes: