2010-07-06 27 views
4

如何使用getElementByName中的正则表达式遍历所有元素?getElementByName&Regex

+7

不要描述你如何认为你可以解决你的问题,描述你的*问题*。 – Tomalak 2010-07-06 07:17:58

+0

我有控件动态填充..由于他们是asp控件,Id将被改变,同时呈现。我在想,因为name属性总是包含单词“customcontrol”,那么也许我可以遍历所有的控件。 – user384080 2010-07-06 07:23:56

+6

你需要用这些控件做什么?另外,是不是可以向他们添加一个共同的类? – James 2010-07-06 07:32:12

回答

14

如果你的意思是像:

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); 

或者,它可能是更容易通过类名

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|$)"); 

如果你想寻找与一个元素与名始于 “customcontrol” 你会用:

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

编辑:

如果你使用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

如何循环使用$(“* [name^='customcontrol']”);? – user384080 2010-07-06 22:59:45

+0

+1很好做,我完全忘了jQuery有内置的某种形式的匹配。另请参见:http://stackoverflow.com/questions/190253/jquery-selector-regular-expressions – cgp 2010-07-06 23:53:11

+0

@ ronald-yoh更新了我的答案用于循环元素。 – 2010-07-07 06:04:58