2010-07-06 4 views
4

getElementByName에서 정규 표현식을 사용하여 모든 요소를 ​​반복 처리하는 방법은 무엇입니까?getElementByName & Regex

+7

문제를 어떻게 해결할 수 있다고 생각하는지 설명하지 말고 * 문제 *를 설명하십시오. – Tomalak

+0

동적으로 채워진 컨트롤이 있습니다. ASP 컨트롤이므로 렌더링되는 동안 Id가 변경됩니다. name 속성에는 항상 "customcontrol"이라는 단어가 포함되어 있으므로 모든 컨트롤을 반복 할 수 있다고 생각했습니다. – user384080

+6

이러한 컨트롤을 사용하여 수행해야하는 작업은 무엇입니까? 또한 공통 클래스를 모두 추가 할 수 없습니까? – James

답변

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

을 아니면 쉽게 할 수있는 모든 요소를 ​​통해 이동 및 배열에 특정 이름을 가진 모든 요소를 ​​추가합니다

Heres는 함수 클래스 이름

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

+0

+1 멋지게 완료, 나는 완전히 jQuery에 내장 된 일치하는 양식이 있다는 것을 잊었습니다. 또한보십시오 : http://stackoverflow.com/questions/190253/jquery-selector-regular-expressions – cgp

+0

@ ronald-yoh 내 대답 업데이트 요소를 루핑하기 위해. –

0

는 jQuery를에 custom selector를 사용합니다. 아마도 example with parameters을 원할 것입니다.

+0

나는 당신이 그것을 할 수 있다는 것을 결코 알지 못했다! 그건 달아. –