【问题标题】:Javascript DOM traversing and CSS selectorsJavascript DOM 遍历和 CSS 选择器
【发布时间】:2015-07-05 08:42:36
【问题描述】:

场景

我正在研究现有的网络实施。我正在添加一些逻辑客户端来跟踪用户体验。

约束

不幸的是,当前的实现缺少一些有用的 Id 属性。我不允许插入它们,也不允许修改现有的 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遍历?

【问题讨论】:

  • 也许你可以只存储你必须申请parentNode的次数?
  • 是的,可用选项之一

标签: javascript dom css-selectors


【解决方案1】:

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);

【讨论】:

    猜你喜欢
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 2010-12-25
    相关资源
    最近更新 更多