我正在开发一个自动化项目,其中我有一个带搜索框的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;
}
答案 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"/>