使用JavaScript导航复杂/膨胀的DOM结构

时间:2017-06-21 19:37:21

标签: javascript dom

我被赋予了应该在工作中相当简单和直接的任务,使用JavaScript来禁用或删除按钮。这很容易,因为我真正需要做的就是button.disabled = true。但是我还没能在DOM中找到一条路径来访问该按钮。

这是在2004年左右购买的第三方软件。要求公司禁用我们的按钮是没有意义的,因为它不再真正支持,因为它只是他们在购买另一家公司时获得的产品。源代码是php并且已加密,因此我们无法读取或修改它。值得庆幸的是,他们没有对JavaScript文件执行相同的过程,而是打开了禁用按钮的开头。页面元素未正确标识为名称和id属性未一致设置。

我尝试了什么

  • document.contains(" EXPORT_CSV&#34)
  • document.body.contains(" EXPORT_CSV&#34)
  • document.getElementById() - 按钮已命名,没有ID' ed
  • document.getElementByName(" Export_CSV") - 赋予对象不支持的属性或方法' getElementByName'
  • 在我成功导航到的路径部分上尝试两种getelement方法已经表明它只能在当前级别工作,而不像我想象的那样工作。出于某种原因,我被迫手动导航元素,而不是更容易访问路径。

我正在使用的JavaScript文件最初加载到页面上的iframe中。从那里开始工作,我已经成功地完成了部分工作,但是速度缓慢且令人沮丧。以下访问路径是我目前管理的

  

window.parent.window.frames [2] .document.forms [0] .document.getElementById(" ReportTable&#34)的document.getElementById(" ReportLayout&#34)

DOM Explorer显示的完整路径是:

  

HTML /体/ iframe中#标识=数据帧/ HTML /体/形式/表#标识= ReportTable / TBODY / TR / TD /表/ tbody的/ TR / TD#标识= ReportLayout /字段集/表/ TR / TD /按钮#名称= EXPORT_CSV

我已经在其中包含了已设置的元素的名称和ID。有时我被迫列出元素,所以我可以选择正确的元素。这些例子是上面的document.forms [0]和window.frames [2]。为了找到这些信息,我使用了诸如

之类的方法
  

var table_count = target_loc.document.getElementsByTagName(" table");

     

警告("表格:" + table_count.length);

     

var i;

     

for(i = 0; i< table_count.length; i ++){alert(i +&#34 ;: name:" + table_count [i] .name +" id:&# 34; + table_count [i] .id); }

     

window.parent.window.frames [2] .document.forms [0]

下的表名

所以我需要浏览的路径的最后一部分是

  

字段集/表/ TR / TD /按钮#名称= EXPORT_CSV

但我还没有设法弄清楚如何在字段集中导航。我也可能需要帮助访问和导航未命名或id的表。一旦我在表中,我希望我可以得到其余的,因为我应该能够使用document.getElementByName,或者只是使用row []和stuff来导航。

1 个答案:

答案 0 :(得分:1)

@DanielWatt(OP)希望我发一个实际的答案,所以来吧。今天JavaScript有document.querySelector,可以根据CSS选择器选择一个元素。

document.querySelector('[name="leName"]')

值得一提的是:当效果很重要时,最好指定一个标记名称(例如input[name="leName"]form[name="leName"])。单独的属性选择器被视为“任何标记”,就像*一样,并且是效率最低的选择器之一。如需进一步阅读,请参阅CSS performance has changed for the better