我想通过其父节点使用DOM层次结构节点结构访问元素。我试图通过firebug找到DOM层次结构;想要<parent_node1>.<child_node1>.<child_node2>
(不是 document.getElementByID
,getElementbyname
)来访问元素。
我想自动化一个场景,比如我有列标题和相应的值。想要测试每个列标题下的值是否正确...
我正在考虑使用DOM作为自动化这种情况的方法......但是,我怎样才能找到DOM层次结构......?
我通过Firebug中的Inspect Element看到的是,事件列表,元素,并且看起来不像层次结构节点结构......有人可以在这方面提供帮助吗?
答案 0 :(得分:1)
document.getElementById
和document.getElementByTagname
。它们获取DOM中的对象(特别是文档对象,尽管您也可以在元素上调用它们)并返回一个对象,该对象分别是单个元素或零个或多个元素的集合。这是一个DOM操作。从那里你可以对结果进行其他DOM操作,比如让孩子,父母或兄弟姐妹,改变价值观等。
所有DOM操作都归结为:
document
,但我们经常做的第一件事是调用document.getElementById
或document.getElementByTagname
,然后从我们真正认为是起点的结果开始工作。startingPoint.getElementById
*还是startingPoing.getElementByTagname
或许与某些测试相结合(例如,只处理具有特定{{1}的那些如果他们有特殊类型的孩子等,在与您类似的情况下,起点将是classname
,document.getElementById(someID)
或类似地找到的一个或多个表格。从该表中,document.getElementById(someID).getElementsByTagname('table')[0]
将为您提供列标题。根据结构以及您正在使用的内容,您只需从myTable.getElementsByTagname('th')
中选择相应的元素,或者遍历每一行,然后使用myTable.getElementsByTagname('td')
。
您也可以使用curRow.getElementsByTagname('td')
,firstChild
等等,但通常使用标记名过滤掉您不关心的元素会更方便。
*由于文档中只能有一个具有给定id的元素,如果在文档层次结构中较高的任何元素上调用,它将返回相同的内容,因此我们通常只在childNodes
上调用它。如果我们想要在元素是当前元素的后代时执行某些操作,那么在元素上调用它会很有用,而不是其他。
答案 1 :(得分:1)
如上所述,您可能意味着DOM Element properties
,例如element.childNodes
,element.firstChild
或类似。
看一下DOM Element property reference over at JavaScriptKit,您将对如何访问层次结构有一个很好的了解。
var currentTD = document.getElementsByTagName("td")[0];
var currentTable = document.getElementsByTagName("table")[0];
currentTD.parentNode // contains the TR element the TD resides in.
currentTable.childNodes // contains THEAD TBODY and TFOOT if present.
DOM Tables even have more properties喜欢rows
集合和cells
集合。
谨慎提醒:请注意这些集合是实时集合,因此迭代它们并在每次迭代中访问collection.length
可能非常慢,因为为了获得长度,DOM具有每次都要被查询。