首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用部分通配符的JavaScript - getElementsByName

使用部分通配符的JavaScript - getElementsByName
EN

Stack Overflow用户
提问于 2018-05-18 08:01:14
回答 2查看 2.5K关注 0票数 4

我正在进行一个自动化项目,在这个项目中,我有一个带有搜索框的web适配器,但是没有搜索按钮,唯一的方法就是点击enter。我找到了一个以前的线程,它提供了一个通过ID获取文本框元素的解决方案,但是在这个场景中,每次页面加载时都会随机生成文本框ID。

文本框的名称也总是会更改,除非名称的末尾总是以_text结尾。

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

代码语言:javascript
复制
eventname = "keydown"

elementID = "*_text"
代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

发布于 2018-05-18 08:09:29

如果您想要有一个包含所有元素的列表,或者如果您想要选择一个特定的元素,可以运行这种特殊类型的属性选择器[id$="_text"]document.querySelectorAll()

代码语言:javascript
复制
console.log(document.querySelectorAll('[id$="_text"]'));
代码语言:javascript
复制
<p id="foo_text">Foo</p>
<p id="bar_text">Bar</p>
<p id="baz_text">Baz</p>

您可以对任何HTML属性采用此解决方案。如果要按名称属性进行查询,请使用document.querySelectorAll('[name$="_text"]')

票数 3
EN

Stack Overflow用户

发布于 2018-05-18 08:05:25

我对attribute...is it nameid有点困惑。尽管这并不重要,但您可以尝试使用Attribute Ends With Selector

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

代码语言:javascript
复制
document.querySelectorAll('[name$="_text"]')[0]

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

代码语言:javascript
复制
document.querySelector('[name$="_text"]')

代码语言:javascript
复制
let firstVal = document.querySelectorAll('[name$="_text"]')[0].value
console.log(firstVal);
代码语言:javascript
复制
<input name="1_text" value="one"/>
<input name="2_text" value="two"/>
<input name="3_text" value="three"/>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50406547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档