0

目前我正在使用以下代码来获取所选元素的路径

if (!(el instanceof Element)) return;
        var path = [];
        while (el.nodeType === Node.ELEMENT_NODE) {
            var selector = el.nodeName.toLowerCase();
            if (el.id) {
                selector += '#' + el.id;
            } else {
                var sib = el, nth = 1;
                while (sib.nodeType === Node.ELEMENT_NODE && (sib = sib.previousSibling) && nth++);
                selector += ":nth-child("+nth+")";
            }
            path.unshift(selector);
            el = el.parentNode;
        }
        return path.join(" > ");

它在我的完整 html 页面的上下文中返回正确的路径。但是我希望这个功能不是在整个页面上工作,而是在我的 html 页面的小区域的上下文中工作。我如何限制这个函数的工作让我们在一些 div#id 里面说?

4

2 回答 2

1

但是我希望这个功能不是在整个页面上工作,而是在我的 html 页面的小区域的上下文中工作。我如何限制这个函数的工作让我们在一些 div#id 里面说?

听起来你只需要在到达那个特定元素后停止遍历树。根据您是否将 ID 或元素传递给函数,您可以执行以下操作:

while (el.nodeType === Node.ELEMENT_NODE && (!el.id || el.id !== SOME_ID)) {

或者

while (el.nodeType === Node.ELEMENT_NODE && el !== SOME_ELEMENT) {
于 2013-10-23T10:07:03.473 回答
0

你不能,至少不使用 DOM API。

DOM API 允许你遍历整个 DOM,你可以上去你喜欢的地方。如果您有参考,document您可以自由地做任何事情。

限制访问的一种方法是为 DOM API 编写一个包装器。这个包装器将具有您需要的功能,其中可能包括:创建新的 DOM 节点、删除 DOM 节点、设置 DOM 节点的属性。但是您将无法自由地遍历 DOM 树(因为这会破坏您想要的封装)。

这种包装器的细节非常复杂,有很多选择。我正在使用一个内部开发的框架,它将它与小部件的符号结合起来,它非常好。

于 2013-10-23T09:39:58.893 回答