获取 Document.getElementByID("id_name") 选择的元素的索引

get index of element selected by Document.getElementByID("id_name")

对于页面 ("Bill4Time"),仪表板显示 table 用于显示时间条目和输入新的时间条目,但几个控件元素没有与之关联的 ID。有趣的是,添加新时间输入行的控件(右下角带有小加号的剪贴板图标)始终具有相同的索引号(因此我可以 select 它与 Document.all("index_no") 添加新的时间条目。但是一旦您通过输入新的时间条目来编辑该行,控件图标就会更改(变为通用剪贴板,就像 table 中的所有其他时间条目一样)并且索引变为动态 - 并且没有与该控件关联的 ID。但是,我发现父元素(即 table 单元格)确实有一个永远不会改变的唯一 ID(虽然它是最近添加的时间条目) 所以目前我转到它(使用 Document.getElementByID("unique_id").focus()),然后发送 {tab} 移至控制元素(并发送 {enter} 转到正确的详细信息页面)。

如果我能获得 unique_id 元素的索引号,并将其递增 1,我就可以更可靠地获得我想要的控件,所以我的问题是,如果一个 DOM 元素通过id,如何找到它的索引号?

当我在这里(或google)搜索时,我得到了很多关于查找父元素中包含元素的索引的结果,或者基于 .selectedIndex 等的结果,我想我可以遍历所有 DOM 元素,直到找到带有 ID = unique_id 的元素,但应该有更好的方法来获取 selected 元素的索引号。

TIA,

您提到了循环,但我认为这可能是实现此目的的方法,因为 ID 是唯一的。通过 ID 获取匹配元素会为您提供该元素,而不是元素数组(就像您通过 class 匹配一样),它们都有一个索引。

如果知道要关注的table的ID,不想用jQuery.

可以这样
//get all the tables
var thisEleArr = document.getElementsByTagName('table');
var indexOfTableIWant;

//loop through the array of tables
for (var i=0;i<thisEleArr.length;i++) {
    //if the id of the current table in the loop matches the known id
    if (thisEleArr[i].getAttribute('id')==='knownTableID') {
        //get the index of it
        indexOfTableIWant = i;
    }
}

我使用列表的示例:https://jsfiddle.net/ksumarine/ga06n54u/

至少如果用 IE 和 AutoHotkey 这样做,这会给你索引

index := wb.document.getElementByID("unique_id").sourceIndex

但是如果你有父元素就不需要索引

element := wb.document.getElementByID("unique_id").childnodes[0]

很多时候没有 ID 的元素通常有 Name 或 Class 属性,它们也可以用来查找您需要的元素...