2015-09-10 38 views
0

背景JS:可以遍歷嵌套的子元素,但首先找到最深的元素?

我有一系列包含許多嵌套的子元素對象。我需要找到這些孩子中的哪些元素是「後退」按鈕,我已用標籤屬性='backbtn'進行了識別。

一旦我找到了這個孩子,我就爲我做了一系列的任務來做一個fireEvent。

現在我成功地用這一段代碼,通過我的對象迭代,發現具有「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',那麼上述函數將簡單地匹配它找到並返回的第一個函數。

我需要實際做相反的事情,並首先找到最深處的元素。

是否有這樣的可能?

+0

您是否嘗試過遞歸? – Aakash

+0

_「有一系列包含許多嵌套的子元素的對象,我需要找到哪些子元素是'後退'按鈕,我用標籤property ='backbtn'」_標識過。問題中的「對象」? – guest271314

+0

您無法在父母面前找到孩子,因爲只有通過父母才能找到孩子。因此,找到最深的X的唯一方法是找到所有的X,然後查看哪個最深,並在最後使用該X。 – jfriend00

回答

0

嘗試利用Object.hasOwnProperty()遞歸,直到沒有找到匹配

var anotherchild = { 
 
    name: 'Alexander', 
 
    age: '99' 
 
}; 
 
var firstchild = { 
 
    name: 'Smith', 
 
    age: '10', 
 
    child: anotherchild 
 
}; 
 
var a = { 
 
    name: 'John', 
 
    age: '32', 
 
    child: firstchild 
 
}; 
 

 
function found(obj) { 
 
    alert(JSON.stringify(obj)) 
 
} 
 

 
(function find(obj) { 
 
    if (obj.hasOwnProperty("child")) { 
 
    find(obj.child) 
 
    } else { 
 
    found(obj) 
 
    } 
 
}(a));

+0

您錯過了'label'等於'needle'的檢查 –

+0

@torazaburo _「您錯過了'l亞伯'等於'針'。 「_如果正確解釋Question,那麼在OP的現有'find'函數中包含嚴格的等同性檢查,看起來不會返回預期的結果?請參見http:// stackoverflow。com/questions/32493317/js-js-possible-to-ite-through-nested-children-elements-but-find-the-deepest-e/32493654#comment52846840_32493317 _「它應該有希望導致亞歷山大」_ – guest271314

+0

@torazaburo是正確的,它需要實際檢查標籤=針。這是因爲有許多其他對象需要被忽略 – Mark