获取对象的路径并将其转换为 JavaScript 中的字符串
Get path of object and convert it to string in JavaScript
如何生成对象路径的字符串?例如,假设我想将以下路径(不是其内容)转换为字符串:
object = grandparent.children[2].children[4].whatever;
我需要这样的功能:
function stringifyPath(obj) {
// somehow return "grandparent.children[2].children[4].whatever";
}
您根本无法在 Javascript 中执行此操作,除非每个 object 存储对其自身 parent 的引用并且有一种已知的导航方式 children (就像 DOM 节点一样)。
这是因为当您将 object 嵌入另一个 object(您所说的 parent/child 关系)时,它并不是真正的 object 嵌入在另一个。 child 是一个独立的 object,并且在 parent 中有对它的引用。同样的 child 可以存储在许多不同的地方。从Javascript的角度来看,它实际上并没有parent。它是一个 object 许多不同的东西都可以参考的东西。
如果每个 child object 都存储了对其自身 parent 的引用,并且有一种已知的方式可以在任何级别上行走 children,那么它可能是可以像您所说的那样编写代码来构建路径,但是您必须更加具体地了解这些 object 到底是什么以及如何找出给定的 child 索引object是。
例如,如果这些 DOM object 满足两个条件(child 包含对 parent 的引用,并且有一种已知的导航方式children of any given object) and you want the root parent be document.body
, then you could do this:
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;
}
如何生成对象路径的字符串?例如,假设我想将以下路径(不是其内容)转换为字符串:
object = grandparent.children[2].children[4].whatever;
我需要这样的功能:
function stringifyPath(obj) {
// somehow return "grandparent.children[2].children[4].whatever";
}
您根本无法在 Javascript 中执行此操作,除非每个 object 存储对其自身 parent 的引用并且有一种已知的导航方式 children (就像 DOM 节点一样)。
这是因为当您将 object 嵌入另一个 object(您所说的 parent/child 关系)时,它并不是真正的 object 嵌入在另一个。 child 是一个独立的 object,并且在 parent 中有对它的引用。同样的 child 可以存储在许多不同的地方。从Javascript的角度来看,它实际上并没有parent。它是一个 object 许多不同的东西都可以参考的东西。
如果每个 child object 都存储了对其自身 parent 的引用,并且有一种已知的方式可以在任何级别上行走 children,那么它可能是可以像您所说的那样编写代码来构建路径,但是您必须更加具体地了解这些 object 到底是什么以及如何找出给定的 child 索引object是。
例如,如果这些 DOM object 满足两个条件(child 包含对 parent 的引用,并且有一种已知的导航方式children of any given object) and you want the root parent be document.body
, then you could do this:
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;
}