현재 해결 방법은 브라우저가 이 메소드를 지원하는지 확인하는 것입니다. 지원하지 않으면 getElementsByClassName 메소드를 문서 객체에 추가하세요. 네이티브 함수가 있는지 여부에 관계없이 코드를 수정해야 합니다.
일반적으로 getElementsByTagName("*")을 사용하여 문서의 모든 요소를 검색한 다음 탐색하고 정규식을 사용하여 일치하는 요소를 찾아 배열에 넣고 반환합니다. IE5는 document.getElementsByTagName("*")을 지원하지 않으므로 오류 방지를 위해 document.all 브랜치를 사용하세요
다음 방법은 문서 작성을 완벽하게 지원합니다
if (!document.getElementsByClassName){
document.getElementsByClassName = function(className, element){
var children = (element || document).getElementsByTagName('*')
var elements = new Array( );
for (var i=0; ivar child = children[i]
var classNames = child.className.split(' ');
for (var j=0; jif (classNames[j] == className){
elements.push(child)
break; >}
}
}
return elements;
}
최종 해결책은 다음과 같습니다.
var getElementsByClassName = function (searchClass, node,tag) {
if(document.getElementsByClassName ){
var 노드 = (노드 || 문서).getElementsByClassName(searchClass),result = []
for(var i=0 ;node = 노드[i ];){
if (tag !== "* " && node.tagName === tag.toUpperCase()){
result.push(node)
}else{
result.push(node)
}
}
결과 반환
}else{
node = node || document;
tag = tag || "*"
var class = searchClass.split(" ") ,
elements = ( tag === "*" && node.all)? node.all : node.getElementsByTagName(tag),
patterns = [],
current,
match; 🎜>var i = 클래스 길이;
while(--i >= 0){
patterns.push(new RegExp("(^|s)" 클래스[i] "(s|$) "));
}
var j = elements.length;
while(--j >= 0){
current = elements[j];
match = false;
for(var k= 0, kl=patterns.length; kmatch = 패턴[k].test(current.className)
if (!match) break; 🎜>}
if (일치) result.push(현재)
}
결과 반환
}
}