getElementByName & Regex - PullRequest
       4

getElementByName & Regex

4 голосов
/ 06 июля 2010

Как мне перебрать все элементы, используя регулярное выражение в getElementByName?

Ответы [ 2 ]

16 голосов
/ 06 июля 2010

Если вы имеете в виду, как:

var elementArray = document.getElementsByName("/regexhere/");

тогда нет, это было бы невозможно.

Чтобы сделать то, что вы хотите, вам нужно получить все элементы, затем пройтись по каждому из них и проверить его название.

Вот функция, которая пройдет через все элементы и добавит все элементы с определенным именем в массив:

    function findElements(name)
    {
        var elArray = [];
        var tmp = document.getElementsByTagName("*");

        var regex = new RegExp("(^|\\s)" + name + "(\\s|$)");
        for ( var i = 0; i < tmp.length; i++ ) {

            if ( regex.test(tmp[i].name) ) {
                elArray.push(tmp[i]);
            }
        }

        return elArray;

    }

И использовать как:

var elName = "customcontrol";

var elArray = customcontrol(elName);

Или это может быть проще для className

    function findElements(className)
    {
        var elArray = [];
        var tmp = document.getElementsByTagName("*");

        var regex = new RegExp("(^|\\s)" + className+ "(\\s|$)");
        for ( var i = 0; i < tmp.length; i++ ) {

            if ( regex.test(tmp[i].className) ) {
                elArray.push(tmp[i]);
            }
        }

        return elArray;

    }

И использовать как:

var elClassName = "classname";

var elArray;

if (!document.getElementsByClassName)
{
   elArray= findElements(elClassName );
}
else
{
   elArray = document.getElementsByClassName(elClassName);
}

Это будет делать то, что вы хотите, без необходимости getElementByName.

Хотя я думаю, что вы имели в виду getElementsByName

Если вы хотите найти элемент только с именем «customcontrol», вы должны использовать:

var regex = new RegExp("(^|\\s)" + name + "(\\s|$)");

Если вы хотите найти элемент с STARTED с именем «customcontrol», вы должны использовать:

var regex = new RegExp("(^|\\s)" + name);

EDIT:

Если вы используете jQuery, что будет проще, то это будет делать:

var elArray = $("*[name^='customcontrol']");

//Use JavaScript to loop through
for (var a = 0; a< elArray.length;a++)
{
   //Loop through each element
   alert(elArray[a]);
}
//Or
$("*[name^='customcontrol']").css("color","red"); //Or whatever you want to do to the elements
0 голосов
/ 06 июля 2010

Используйте пользовательский селектор в jQuery. Возможно, вам нужен пример с параметрами .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...