JavaScript - 使用部分通配符的 getElementsByName

MPo*_*ter 5 javascript automation element

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

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

我尝试*_text在以下脚本中使用作为我的参数,但我不断收到错误。有什么想法我做错了吗或者有更好的建议吗?

eventname = "keydown"

elementID = "*_text"
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)

Mam*_*mun 2

我对这个属性有点困惑......是它name还是id. 虽然这没什么关系,但您可以尝试使用Attribute Ends With Selector.

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

document.querySelectorAll('[name$="_text"]')[0]
Run Code Online (Sandbox Code Playgroud)

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

document.querySelector('[name$="_text"]')
Run Code Online (Sandbox Code Playgroud)

document.querySelectorAll('[name$="_text"]')[0]
Run Code Online (Sandbox Code Playgroud)
document.querySelector('[name$="_text"]')
Run Code Online (Sandbox Code Playgroud)