【发布时间】:2015-09-10 22:35:12
【问题描述】:
背景
我有一系列包含许多嵌套子元素的对象。我需要找出这些子元素中的哪些是“后退”按钮,我已经用标签属性 = 'backbtn' 来标识它。
一旦我找到了这个孩子,我就会对其执行一系列任务。
现在我成功地使用这段代码来遍历我的对象以找到一个具有标签属性'backbtn'的孩子
编辑:添加示例数据
var anotherchild = {
name: 'Alexander',
age: '99',
label:'backbtn'
};
var firstchild = {
name: 'Smith',
age: '10',
child: another child,
label:'backbtn'
};
var a = {
name: 'John',
age: '32',
child: first child,
label:'backbtn'
};
function find(haystack, needle) {
if (haystack.label === needle) {return haystack; }
for (var i = 0; i < haystack.children.length; i ++) {
var result = find(haystack.children[i], needle);
if (result) { return result; }
}
return null;
}
find(myContent, "backbtn").fireEvent('click');
问题
现在我的问题是,当我有几个孩子被标记为“backbtn”时,上面的函数将简单地匹配它找到的第一个并返回它。
我实际上需要反过来,首先找到最深的元素。
这样的事情可能吗?
【问题讨论】:
-
你试过递归吗?
-
“有一系列包含许多嵌套子元素的对象。我需要找到这些子元素中的哪些是“后退”按钮,我用标签属性标识了它= 'backbtn'" 可以在问题中包含“对象”的示例吗?
-
您无法在父母之前找到孩子,因为只有通过父母才能找到孩子。因此,找到最深 X 的唯一方法是找到所有 X,然后查看哪个是最深的,并在最后使用那个。
-
@guest271314 肯定是这样的。 var a = { name:'John', age:'32', child:firstchild}; var firstchild = { name:'Smith', age:'10', child:another child, label:'backbtn'}; var anotherchild = { name:'Alexander', age:'99', child:etc, label:'backbtn'};因此,在搜索“backbtn”时,它应该有望得到 Alexander(使用我上面的函数,它会得到 Smith
-
你如何定义“最深”?在检查父级之前先搜索子级很容易,但这仍然可以返回向下两层的结果,在树的后面三层向下匹配。
标签: javascript