JavaScript - getElementsByName с использованием частичного подстановочного знака - PullRequest
0 голосов
/ 18 мая 2018

Я работаю над проектом автоматизации, в котором у меня есть веб-адаптер с окном поиска, но нет кнопки поиска, единственный способ продолжить - нажать Enter.Я нашел предыдущую ветку, которая предоставляла решение для получения элемента текстового поля по идентификатору, однако в этом случае идентификатор текстового поля генерируется случайным образом при каждой загрузке страницы.

Имя текстового поля также всегда изменяетсяза исключением того, что конец имени всегда оканчивается на _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 голосов
/ 18 мая 2018

Запустите этот особый вид селектора атрибутов [id$="_text"] с помощью document.querySelectorAll(), если вы хотите получить список всех элементов, или `document.querySelector (), если вы хотите выбрать один конкретный элемент.

console.log(document.querySelectorAll('[id$="_text"]'));
<p id="foo_text">Foo</p>
<p id="bar_text">Bar</p>
<p id="baz_text">Baz</p>

Вы можете принять это решение для любого атрибута HTML.Если вы хотите сделать запрос по атрибуту имени, используйте document.querySelectorAll('[name$="_text"]').

0 голосов
/ 18 мая 2018

Я немного запутался в атрибуте ... это name или id.Хотя это мало что значит, вы можете попробовать с Attribute Ends With Selector.

. Вы можете использовать селектор в querySelectorAll() для выбора более чем одного элемента.

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

ИЛИ: с 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"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...