2015-07-03 98 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);