>  기사  >  웹 프론트엔드  >  IE_javascript 스킬에서 getElementsByClassName을 사용할 수 없는 문제 해결

IE_javascript 스킬에서 getElementsByClassName을 사용할 수 없는 문제 해결

WBOY
WBOY원래의
2016-05-16 17:24:191210검색

오늘은 getElementsByClassName을 사용하여 작은 프로그램을 작성했는데 테스트하게 되어 기쁩니다. FF나 Google과 같은 주류 브라우저에서는 잘 작동하고 IE9에서도 작동합니다. 그러나 IE6과 8에서 테스트할 때 문제가 발생합니다. 브라우저에서 오류를 보고했습니다. 코드를 고민하다가 문제가 없는 것 같아 두니앙을 찾아보기로 했습니다. . . 드디어 문제를 발견했는데, IE6과 8에서는 getElementsByClassName 메소드가 지원되지 않는 것으로 나타났습니다. 그러다가 인터넷에서 해결책을 찾아보다가 더 나은 방법을 찾았는데, 자세히 살펴보니 2005년에 문제가 된 것이었습니다. . . 먼저 코드를 입력하세요:

코드를 복사하세요 코드는 다음과 같습니다:

*
Robert Nyman 개발, http://www.robertnyman.com
코드/라이센스: http://code.google.com/p/getelementsbyclassname/
*/
var getElementsByClassName = 함수(className , tag, elm) {
if (document.getElementsByClassName) {
getElementsByClassName = function (className, tag, elm) {
elm = elm || document; className),
nodeName = (태그)? new RegExp("\b" tag "\b", "i") : null,
returnElements = [],
current; var i=0, il=elements.length; icurrent = elements[i]
if(!nodeName || nodeName.test(current.nodeName)) {
returnElements.push (현재);
}
}
returnElements;
}
}
else if (document.evaluate) {
getElementsByClassName = 함수( className, tag, elm ) {
tag = tag || "*";
elm = elm || document
var class = className.split(" "),
classesToCheck = "" ,
xhtmlNamespace = "http://www.w3.org/1999/xhtml",
namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
returnElements = [] ,
요소,
노드
for(var j=0, jl=classes.length; jclassesToCheck = "[contains(concat(' ', @class, ' ' ), ' " 클래스[j] " ')]";
}
try {
elements = document.evaluate(".//" tagclassesToCheck, elm, 네임스페이스Resolver, 0 , null);
}
catch (e) {
elements = document.evaluate(".//" tagclassesToCheck, elm, null, 0, null)
}
while ((노드 ​​= 요소 .iterateNext())) {
returnElements.push(노드);
}
return Elements
}
else {
getElementsByClassName = 함수(className, tag, elm) {
tag = tag || "*"
elm = elm || document;
className.split(" "),
classesToCheck = [],
elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
current,
returnElements = [],
match;
for(var k=0, kl=classes.length; kclassesToCheck.push(new RegExp("(^|\s)" 클래스[k ] "(\s|$ )"));
}
for(var l=0, ll=elements.length; lcurrent = elements[l] ;
match = false ;
for(var m=0, ml=classesToCheck.length; mmatch =classesToCheck[m].test(current.className);
if (!match ) {
break;
}
}
if (match) {
returnElements.push(current)
}
}
return returnElements;
}
return getElementsByClassName(className, tag, elm)
};


자세한 사용 방법은 다음을 참조하세요. 그 안에 있는 사용법.

이 방법을 사용하면 IE6 및 8에서 표시될 수 있지만 여전히 여러 번 새로 고침하면 오류가 보고되는 경우가 있습니다. 그런 다음 jquery를 사용하여 이 새로 고침 오류 문제를 해결할 수 있는지 궁금했습니다. 물론 jquery는 getElementsByClassName 메서드를 대체할 수도 있습니다. 여기서는 사용 방법을 소개하지 않겠습니다. 그러나 현실은 사람들이 원하는 것과 같지 않습니다. 여전히 새로 고침에 문제가 있으며 오류가 무작위로 발생합니다. 첫 번째 로딩 과정에서 오류가 보고되고 때로는 여러 번 새로 고침 후에 오류가 보고됩니다. 영웅. 해결책을 찾으세요.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.