Javascript:Replace Eval()和对象长度未定义问题
下面是我的精简函数,用于在浏览器dom结构中递归Javascript:Replace Eval()和对象长度未定义问题,javascript,eval,Javascript,Eval,下面是我的精简函数,用于在浏览器dom结构中递归 (function () { function displaydom (child, parent) { if (parent) {parent = parent+".";}; // if there is no parent then child is the parent var jsns = eval(parent+child); // Join parent + child and eval
(function () {
function displaydom (child, parent) {
if (parent) {parent = parent+".";}; // if there is no parent then child is the parent
var jsns = eval(parent+child); // Join parent + child and eval
for (var i in jsns){ // loop through dom object's attributes
if (typeof jsns[i] == "object") { // if attribute is an object then recurse through
// display output here
displaydom (String(i) /** next child **/, parent+child);
};
};
};
displaydom ('self', '');
})();
有几个问题——可能很简单——我还没能(在Chrome中)开始工作:
…不能在非数组(或类似数组的对象)的对象上使用传统的for循环,大多数对象都不是。要删除eval,可以使用方括号,如David所说
var jsns = parent;
if(parent) {
jsns = parent[child];
}
您不能更改循环,这是因为您不能按照您建议的方式迭代对象的属性。对象属性只能通过名称访问,它们没有数字索引。实现这一点的唯一方法是您当前使用的for-in循环。self=window(即,我正在迭代dom结构)。我使用self,因为它位于iframe中。另外,顶部的“if”语句补偿了第一个空的父级。好吧,我理解-然后我猜问题是递归调用中来自parent+child的父级是字符串-如何将字符串转换为对象引用?
var jsns = parent;
if(parent) {
jsns = parent[child];
}