> 웹 프론트엔드 > JS 튜토리얼 > IE는 getElementsByClassName을 지원하지 않습니다. 최종 완벽한 솔루션_기본 지식

IE는 getElementsByClassName을 지원하지 않습니다. 최종 완벽한 솔루션_기본 지식

WBOY
풀어 주다: 2016-05-16 17:46:30
원래의
1090명이 탐색했습니다.

현재 해결 방법은 브라우저가 이 메소드를 지원하는지 확인하는 것입니다. 지원하지 않으면 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(현재)
}
결과 반환
}
}


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿