Вопрос по javascript, regex – Найти все элементы, чей идентификатор начинается с общей строки

33

У меня есть XSL, который создал несколько элементов с идентификатором & quot; creatOn & quot; плюс $ уникальный идентификатор

Example : createdOnid0xfff5db30

Я хочу найти и сохранить их в переменной с помощью JavaScript. Я пытался

var dates = document.getElementsById(/createdOn/);

но это не похоже на работу.

Возможный дубликатgetElementById() wildcard Liam

Ваш Ответ

5   ответов
2
function idsLike(str){
    var nodes= document.body.getElementsByTagName('*'),
    L= nodes.length, A= [], temp;
    while(L){
        temp= nodes[--L].id || '';
        if(temp.indexOf(str)== 0) A.push(temp);
    }
    return A;
}

idsLike('createdOn')
2

CSS селектор  вместе сJavaScript& APOS; s.querySelectorAll() метод.

В твоем случае :

var dates = document.querySelectorAll('[id^="createdOnid"]');
7

вероятно, вам это не нужно, я предлагаю добавить класс к этим элементам при их создании. Затем используйте функцию getElementsByClassName (), которая встроена в большинство браузеров. Для IE вам нужно добавить что-то вродеэтот:

if (typeof document.getElementsByClassName!='function') {
    document.getElementsByClassName = function() {
        var elms = document.getElementsByTagName('*');
        var ei = new Array();
        for (i=0;i<elms.length;i++) {
            if (elms[i].getAttribute('class')) {
                ecl = elms[i].getAttribute('class').split(' ');
                for (j=0;j<ecl.length;j++) {
                    if (ecl[j].toLowerCase() == arguments[0].toLowerCase()) {
                        ei.push(elms[i]);
                    }
                }
            } else if (elms[i].className) {
                ecl = elms[i].className.split(' ');
                for (j=0;j<ecl.length;j++) {
                    if (ecl[j].toLowerCase() == arguments[0].toLowerCase()) {
                        ei.push(elms[i]);
                    }
                }
            }
        }
        return ei;
    }
}
Тестирование className для определенного класса может быть проще и быстрее, если создать регулярное выражение:var lookingFor = new RegExp('(?:^|\\s)'+arguments[0]+'(?:\\s|$)'); ... if (lookingFor.test(el.className)){ ... }
1

var values = new Array(valueKey_1);
var keys = new Array("nameKey_1");
var form = document.forms[0];
for (var i = 0; i < form.length; i++) {
    name = form.elements[i].name;
    var startName = name.toLowerCase().substring(0, 18);
    if (startName == 'startStringExample') {
    values.push(name.value);
    keys.push(name);
    }
}
64

attr начинается с селектор:

var dates = $('*[id^="createdOnid"]');

Используя современные браузеры, вы можете использоватьЗначение атрибута CSS3 начинается с селектор вместе сquerySelectorAll:

var dates = document.querySelectorAll('*[id^="createdOnID"]');

Но для возврата к старым браузерам (и без jQuery) вам понадобится:

var dateRE = /^createdOnid/;
var dates=[],els=document.getElementsByTagName('*');
for (var i=els.length;i--;) if (dateRE.test(els[i].id]) dates.push(els[i]);
Error: User Rate Limit Exceeded*Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededself.driver.execute_script("return document.querySelectorAll... ")[0].click()
Error: User Rate Limit Exceeded

Похожие вопросы