【问题标题】:Get path of object and convert it to string in JavaScript获取对象的路径并将其转换为 JavaScript 中的字符串
【发布时间】:2016-04-22 06:54:57
【问题描述】:

如何生成对象路径的字符串?例如,假设我想将以下路径(而不是其内容)转换为字符串:

object = grandparent.children[2].children[4].whatever;

我需要这样的函数:

function stringifyPath(obj) {
    // somehow return "grandparent.children[2].children[4].whatever";
}

【问题讨论】:

    标签: javascript string object path key


    【解决方案1】:

    您根本无法在 Javascript 中执行此操作,除非每个对象都存储对其自身父级的引用并且有一种已知的方式来导航子级(就像 DOM 节点一样)。

    这是因为当您将一个对象嵌入另一个对象(您所说的父/子关系)时,它并不是真正嵌入另一个对象的对象。子对象是一个独立的对象,并且在父对象中有对它的引用。同一个孩子可以存放在许多不同的地方。从 Javascript 的角度来看,它实际上没有父级。它是一个对象,许多不同的事物都可能引用它。

    如果每个子对象都存储了对其自己父对象的引用,并且有一种已知的方法可以在任何级别上行走子对象,那么就可以编写代码来构建一条路径,就像您所说的那样,但是您应该有更具体地了解这些对象到底是什么以及如何找出给定对象的子索引。

    例如,如果这些是满足两个条件的 DOM 对象(子对象包含对父对象的引用,并且有一种已知的方式来导航任何给定对象的子对象)并且您希望根父对象是 document.body,那么你可以这样做:

    function getSiblingPosition(obj) {
        var siblings = obj.parentNode.children;
        var elemCnt = 0;
        for (var i = 0; i < siblings.length; i++){
              if (siblings[i] === obj) {
                return elemCnt;
            } else {
                if (siblings[i].nodeType === 1) {
                    ++elemCnt;
                }
            }
        }
    }
    
    function getPath(obj) {
        var path = "";
        while (obj && obj !== document.body) {
            var cnt = getSiblingPosition(obj);
            path = ".children[" + cnt + "]" + path;
            obj = obj.parentNode;
        }
        path = "document.body" + path;
        return path;
    }
    

    工作演示:https://jsfiddle.net/jfriend00/8w9v8kpf/

    【讨论】:

    • 感谢您的解释和帮助。
    • @americanknight - 如果这篇文章回答了您的问题,那么您可以通过单击答案左侧的绿色复选标记向社区表明这一点。这也将为您赢得一些声誉点,以遵循所需的程序。如果它没有回答您的问题,请解释尚未回答的问题。
    猜你喜欢
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多