JavaScript - 使用部分通配符的getElementsByName

时间:2018-05-18 08:01:15

标签: javascript automation element

我正在开发一个自动化项目,其中我有一个带搜索框的Web适配器但没有搜索按钮,唯一的方法就是按Enter键。我找到了一个前一个线程,它提供了一个按ID获取文本框元素的解决方案,但是在这种情况下,每次页面加载时都会随机生成文本框ID。

文本框的名称也始终更改,但名称末尾始终以_text结尾。

我尝试在以下脚本中使用*_text作为我的参数,但我一直收到错误消息。任何想法我做错了还是有更好的建议?

eventname = "keydown"

elementID = "*_text"
function os_RaiseEvent(eventname,elementId) {
    var element = document.getElementsByName(elementId)[0];
    var event;

    if(document.createEvent) {
        event = document.createEvent("HTMLEvents");
        event.initEvent(eventname, true, false);
        if(eventname == "keydown" || eventname == "keyup") {
            event.keyCode = 13;
        }
        element.dispatchEvent(event);
    }
    else if(document.createEventObject) {
        event = document.createEventObject();
        if(eventname == "keydown" || eventname == "keyup") {
            event.keyCode = 13;
        }
        element.fireEvent("on" + eventname, event);
    }
    return true;
}

2 个答案:

答案 0 :(得分:2)

如果要包含所有元素的列表,请运行此特殊类型的属性选择器[id$="_text"],如果要选择一个特定元素,则运行`document.querySelector()。



document.querySelectorAll()

console.log(document.querySelectorAll('[id$="_text"]'));




您可以针对任何HTML属性采用此解决方案。如果要按名称属性查询,请使用<p id="foo_text">Foo</p> <p id="bar_text">Bar</p> <p id="baz_text">Baz</p>

答案 1 :(得分:1)

我对该属性有点困惑......是name还是id。虽然这很重要,但您可以尝试使用Attribute Ends With Selector

您可以使用querySelectorAll()中的选择器来选择多个元素。

document.querySelectorAll('[name$="_text"]')[0]

OR:querySelector()用于选择第一个匹配的元素:

document.querySelector('[name$="_text"]')

let firstVal = document.querySelectorAll('[name$="_text"]')[0].value
console.log(firstVal);
<input name="1_text" value="one"/>
<input name="2_text" value="two"/>
<input name="3_text" value="three"/>