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

时间:2015-11-03 20:55:56

标签: javascript html dom vbscript autohotkey

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

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

当我在这里(或谷歌)搜索时,我获得了很多结果,用于查找父项中包含的元素的索引,或基于.selectedIndex等的结果,我想我可以循环遍历所有DOM元素直到找到Document.getElementByID("unique_id").focus()的那个,但应该有更好的方法来获取所选元素的索引号。

TIA,

2 个答案:

答案 0 :(得分:0)

你提到了循环,但我认为可能是这样做的方法,因为ID是唯一的。通过其ID获取匹配元素会为您提供该元素,而不是元素数组(如果您按类匹配),这些元素都将具有索引。

如果您知道要关注的表的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/

答案 1 :(得分:0)

至少如果使用IE和AutoHotkey,这将为您提供索引

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

但如果您有父元素

,则不需要索引
element := wb.document.getElementByID("unique_id").childnodes[0]

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