我得到的工作应该是一个相当简单直接的任务,使用JavaScript禁用或删除按钮。这很容易,因为我真正需要做的只是button.disabled = true。但是我还不能找出DOM中的路径来访问按钮。

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

我尝试过的


document.contains(“ Export_CSV”)
document.body.contains(“ Export_CSV”)
document.getElementById()-按钮已命名,未编号
document.getElementByName(“ Export_CSV”)-给出Object不支持属性或方法'getElementByName'
在我成功导航到的路径部分上尝试这两种getelement方法,结果表明它仅在当前级别起作用,而没有我认为的子级别。由于某些原因,我被迫手动导航元素,而不是更轻松地访问路线。


我正在使用的JavaScript文件最初已加载到页面上的iframe中。从那里开始,我设法在其中部分进行了导航,但是过程缓慢而令人沮丧。以下访问路径是我到目前为止所管理的


  window.parent.window.frames [2] .document.forms [0] .document.getElementById(“ ReportTable”)。document.getElementById(“ ReportLayout”)


DOM Explorer显示的完整路径是:


  html / body / iframe#id = dataFrame / html / body / form / table#id = ReportTable / tbody / tr / td / table / tbody / tr / td#id = ReportLayout / fieldset / table / tr / td / button#名称= Export_CSV


我在其中包含已设置的元素的名称和ID。有时我不得不列出元素,以便选择正确的元素。这样的示例是上面的document.forms [0]和window.frames [2]。为了找到该信息,我使用了诸如


  var table_count = target_loc.document.getElementsByTagName(“ table”);
  
  alert(“ table:” + table_count.length);
  
  var i;
  
  for(i = 0; i   
  window.parent.window.frames [2] .document.forms [0]下的表格名称


因此,我需要浏览的路径的最后一部分是


  fieldset / table / tr / td / button#name = Export_CSV


但是我还没有弄清楚如何在字段集中导航。我可能还需要帮助来访问和导航未命名或已标识的表。进入表格后,我希望可以得到其余的信息,因为这样便可以使用document.getElementByName了,或者直接使用row []和其他内容进行导航。

最佳答案

@DanielWatt(OP)希望我发布实际答案,所以就来了。今天,JavaScript具有document.querySelector,它可以基于CSS选择器选择元素。

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


不过,还有一件事要提到:当性能很重要时,最好指定标签名称(例如input[name="leName"]form[name="leName"])。就像*一样,单独将属性选择器视为“任何标签”,并且是效率最低的选择器之一。有关更多阅读,请参见CSS performance has changed for the better

关于javascript - 使用JavaScript导航复杂/膨胀的DOM结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44684905/

10-12 00:09
查看更多