"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > querySelectorAll의 forEach가 Microsoft 브라우저에서 예상대로 작동하지 않는 이유는 무엇입니까?

querySelectorAll의 forEach가 Microsoft 브라우저에서 예상대로 작동하지 않는 이유는 무엇입니까?

2024-11-01에 게시됨
검색:581

Why is forEach on querySelectorAll Not Behaving as Expected in Microsoft Browsers?

querySelectorAll의 forEach가 Microsoft 브라우저에서 예상대로 작동하지 않음: 종합적인 검사 및 솔루션

Internet Explorer 및 Edge 브라우저는 forEach()를 활용하는 개발자에게 고유한 과제를 제시합니다. querySelectorAll 결과에 대한 메소드입니다. 이 메서드는 대부분의 다른 브라우저에서 잘 지원되지만 IE와 Edge는 사용된 DOM 메서드와 컬렉션 속성으로 인해 어려움을 겪습니다.

NodeList 및 HTMLCollection 구별

배열과 유사한 NodeList 인스턴스와는 달리 일치하는 요소의 정적 스냅샷을 나타내는 HTMLCollection 인스턴스는 변경 사항이 실시간으로 반영되는 라이브 컬렉션입니다. forEach() 메서드는 최근 NodeList에서 구현되었지만 HTMLCollection에서는 이를 지원하지 않습니다. 그러나 두 컬렉션 모두 반복 가능하므로 배열로 확장하거나 for-of 루프 또는 Symbol.iterator 속성을 사용하여 반복할 수 있습니다.

forEach() 및 반복 가능 동작

To NodeList에 forEach()가 없는 문제를 해결하려면 간단한 폴리필을 구현할 수 있습니다. ) { NodeList.prototype.forEach = Array.prototype.forEach; }

if (typeof NodeList !== "undefined" && NodeList.prototype && !NodeList.prototype.forEach) {
    NodeList.prototype.forEach = Array.prototype.forEach;
}

결론

if (typeof Symbol !== "undefined" && Symbol.iterator && typeof NodeList !== "undefined" && NodeList.prototype && !NodeList.prototype[Symbol.iterator]) {
    Object.defineProperty(NodeList.prototype, Symbol.iterator, {
        value: Array.prototype[Symbol.iterator],
        writable: true,
        configurable: true
    });
}
릴리스 선언문 이 기사는 1729377497에 재현됩니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3