getElementsByClassName()
많은 HTML 코드에서 트리 메뉴(아마도 여러 개)를 찾기 위해 먼저 className을 통해 DOM 노드를 찾는 메서드(getElementsByClassName)를 구현합니다. 이는 브라우저의 기본 DOM 메소드에 대한 간단하지만 유용한 확장입니다.
이 메소드에는 두 개의 매개변수가 있습니다. ele은 어떤 DOM 노드가 검색할 루트 노드인지 지정하고(즉, ele의 하위 노드만 검색됨) className은 어떤 className이 검색할 루트 노드에 포함되어야 하는지 지정합니다. 조건을 충족하는 노드의 클래스 속성입니다. 반환값은 조건을 만족하는 모든 노드를 저장하는 배열입니다.
function getElementsByClassName(ele,className) {
/ /모든 하위 노드 가져오기
if(document.all){
var children = ele.all;
}else{
var children = ele.getElementsByTagName('*'); 🎜>}
//하위 노드를 탐색하고 className 속성을 확인합니다.
var elements = new Array()
for (var i = 0; i < children.length; i ) {
var child = children [i];
var classNames = child.className.split(' ')
for (var j = 0; j < classNames.length; j ) {
if ( classNames[j] = = className) {
elements[elements.length] = child;
break
}
}
}
return elements; >
var tree = getElementsByClassName(document,'TreeView');
첫 번째 if-else 문은 IE5와의 호환성을 위한 것입니다(IE5는
document.getElementsByTagName('*'을 실행할 수 없음) )). 스크립트 작성 시 절대 브라우저 감지 방법을 사용해서는 안 되며, 대신 실행 가능 여부를 테스트하는 데 사용할 명령문을 직접 사용해야 하며, 반환 값이 null이거나 정의되지 않은 경우에는 다른 방법을 사용해야 합니다. . 이러한 스크립트는 더 나은 호환성과 더 강력할 수 있습니다.
elements[elements.length] = child;, 이 문장도 IE5와의 호환성을 위한 것이므로 배열
의 push 방식은 사용하지 않습니다. push 메서드를 사용해야 하는 경우 getElementsByClassName()
을 실행하기 전에 push 메서드를 오버로드할 수 있습니다. 코드는 다음과 같습니다.
Array.prototype.push = function(value){
this[this.length] = value;
} 참고: 원래는 getElementsByClassName도 가능하길 바랐습니다. 푸시 메소드처럼 작성됩니다. 예를 들어
HTMLElement.prototype.getElementsByClassName = .... 그런데 실제 작업을 해보니
실행시 HTMLElement 객체가 고정되지 않은 것을 발견하고 태그마다 다른 것 같아 포기하게 되었습니다.
주소 표시줄 매개변수 가져오기
var URLParams = new Array();
var aParams = document.location.search.substr(1).split('&')
for (i=0; i < aParams .length i ){
var aParams.split('=')
URLParams[aParam[0]] = aParam[1]; 전달된 이름 매개변수
name=URLParams['name'];
//v2:
Request = {
QueryString : function(item){
var svalue = location.search .match (new
RegExp('[?&]' 항목 '=([^&]*)(&?)','i'))
return svalue ? svalue;
}
}
var key = Request.QueryString('key')