2015-07-03 102 views
0

方案的Javascript DOM遍歷和CSS選擇器

我的工作在現有的網絡實現。我正在添加一些邏輯客戶端來跟蹤用戶體驗。

約束

不幸的是,目前的實施缺乏一些有用的標識屬性。我不允許插入他們,我不允許修改現有的DOM結構

方法

所以,我必須給Javascript DOM遍歷方法上幾乎沒有利用:

var gameLink = eventSource.parentNode.parentNode.querySelector('a.arrow-label'); 

對於設計的緣故我將所有我可以在配置JSON對象。所以,我可以從分開的實現邏輯的任何改變的:

gt.conf = { 
    pages: { 
    'homepage':'Home page' 
    ,'help':'Supporto utente' 
    } 
    , user: { 
    'loggedIn':'autenticato' 
    'registered':'registrato' 
    } 
}; 

現在我很樂意加入的配置對象的選擇:

gt.conf = { 
    /* ... */ 
    , selectors: { 
    'gameLink':'a.arrow-label' 
    } 
} 

這樣:

var gameLink = eventSource.parentNode.parentNode.querySelector(gt.conf.selectors.gameLink); 

但我也會在配置中存儲我的代碼中的(可怕的)parentNode鏈。

問題

有沒有什麼辦法來存儲「parentNode」鏈作爲一個字符串,並用它來執行DOM遍歷?

+2

也許你可以只存儲你必須申請'parentNode'次數? –

+0

是的,可用選項之一 –

回答

0

大廈Frédéric Hamidi's評論:

gt.conf ={ 
    /* ... */ 
    traverseUp: 2 
} 

然後:

var i = gt.conf.traverseUp, 
    scope = eventSource; 
while(i > 0){ 
    scope = scope.parentNode; 
    i--; 
} 
var gameLink = scope.querySelector(gt.conf.selectors.gameLink);