$(document).ready
를 사용하는 스크립트가 있지만 jQuery의 다른 것은 사용하지 않습니다. jQuery 종속성을 제거하여 이를 가볍게 하고 싶습니다.
jQuery를 사용하지 않고 $(document).ready
기능을 구현하려면 어떻게 해야 합니까? 모든 이미지, 프레임 등이 로드된 후에 window.onload
window.onload
를 사용하는 것은 동일하지 않다는 것을 알고 있습니다.
질문자 :FlySwat
$(document).ready
를 사용하는 스크립트가 있지만 jQuery의 다른 것은 사용하지 않습니다. jQuery 종속성을 제거하여 이를 가볍게 하고 싶습니다.
jQuery를 사용하지 않고 $(document).ready
기능을 구현하려면 어떻게 해야 합니까? 모든 이미지, 프레임 등이 로드된 후에 window.onload
window.onload
를 사용하는 것은 동일하지 않다는 것을 알고 있습니다.
IE8은 아니지만 99% 이상의 브라우저 에서 지원하는 표준 기반 대체 DOMContentLoaded
가 있습니다.
document.addEventListener("DOMContentLoaded", function(event) { //do work });
jQuery의 기본 기능은 아래와 같이 window.onload보다 훨씬 더 복잡합니다.
function bindReady(){ if ( readyBound ) return; readyBound = true; // Mozilla, Opera and webkit nightlies currently support this event if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", function(){ document.removeEventListener( "DOMContentLoaded", arguments.callee, false ); jQuery.ready(); }, false ); // If IE event model is used } else if ( document.attachEvent ) { // ensure firing before onload, // maybe late but safe also for iframes document.attachEvent("onreadystatechange", function(){ if ( document.readyState === "complete" ) { document.detachEvent( "onreadystatechange", arguments.callee ); jQuery.ready(); } }); // If IE and not an iframe // continually check to see if the document is ready if ( document.documentElement.doScroll && window == window.top ) (function(){ if ( jQuery.isReady ) return; try { // If IE is used, use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ document.documentElement.doScroll("left"); } catch( error ) { setTimeout( arguments.callee, 0 ); return; } // and execute any waiting functions jQuery.ready(); })(); } // A fallback to window.onload, that will always work jQuery.event.add( window, "load", jQuery.ready ); }
편집하다:
function ready(callback){ // in case the document is already rendered if (document.readyState!='loading') callback(); // modern browsers else if (document.addEventListener) document.addEventListener('DOMContentLoaded', callback); // IE <= 8 else document.attachEvent('onreadystatechange', function(){ if (document.readyState=='complete') callback(); }); } ready(function(){ // do something });
https://plainjs.com/javascript/events/running-code-when-the-document-is-ready-15/ 에서 가져옴
https://stackoverflow.com/a/9899701/175071 에서 가져온 또 다른 좋은 domReady 기능
허용된 답변이 완전하지 않았기 때문에 jQuery 1.6.2 소스를 기반으로 하는 jQuery.ready()
와 같은 "준비된" 기능을 함께 연결했습니다.
var ready = (function(){ var readyList, DOMContentLoaded, class2type = {}; class2type["[object Boolean]"] = "boolean"; class2type["[object Number]"] = "number"; class2type["[object String]"] = "string"; class2type["[object Function]"] = "function"; class2type["[object Array]"] = "array"; class2type["[object Date]"] = "date"; class2type["[object RegExp]"] = "regexp"; class2type["[object Object]"] = "object"; var ReadyObj = { // Is the DOM ready to be used? Set to true once it occurs. isReady: false, // A counter to track how many items to wait for before // the ready event fires. See #6781 readyWait: 1, // Hold (or release) the ready event holdReady: function( hold ) { if ( hold ) { ReadyObj.readyWait++; } else { ReadyObj.ready( true ); } }, // Handle when the DOM is ready ready: function( wait ) { // Either a released hold or an DOMready/load event and not yet ready if ( (wait === true && !--ReadyObj.readyWait) || (wait !== true && !ReadyObj.isReady) ) { // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( !document.body ) { return setTimeout( ReadyObj.ready, 1 ); } // Remember that the DOM is ready ReadyObj.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be if ( wait !== true && --ReadyObj.readyWait > 0 ) { return; } // If there are functions bound, to execute readyList.resolveWith( document, [ ReadyObj ] ); // Trigger any bound ready events //if ( ReadyObj.fn.trigger ) { // ReadyObj( document ).trigger( "ready" ).unbind( "ready" ); //} } }, bindReady: function() { if ( readyList ) { return; } readyList = ReadyObj._Deferred(); // Catch cases where $(document).ready() is called after the // browser event has already occurred. if ( document.readyState === "complete" ) { // Handle it asynchronously to allow scripts the opportunity to delay ready return setTimeout( ReadyObj.ready, 1 ); } // Mozilla, Opera and webkit nightlies currently support this event if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); // A fallback to window.onload, that will always work window.addEventListener( "load", ReadyObj.ready, false ); // If IE event model is used } else if ( document.attachEvent ) { // ensure firing before onload, // maybe late but safe also for iframes document.attachEvent( "onreadystatechange", DOMContentLoaded ); // A fallback to window.onload, that will always work window.attachEvent( "onload", ReadyObj.ready ); // If IE and not a frame // continually check to see if the document is ready var toplevel = false; try { toplevel = window.frameElement == null; } catch(e) {} if ( document.documentElement.doScroll && toplevel ) { doScrollCheck(); } } }, _Deferred: function() { var // callbacks list callbacks = [], // stored [ context , args ] fired, // to avoid firing when already doing so firing, // flag to know if the deferred has been cancelled cancelled, // the deferred itself deferred = { // done( f1, f2, ...) done: function() { if ( !cancelled ) { var args = arguments, i, length, elem, type, _fired; if ( fired ) { _fired = fired; fired = 0; } for ( i = 0, length = args.length; i < length; i++ ) { elem = args[ i ]; type = ReadyObj.type( elem ); if ( type === "array" ) { deferred.done.apply( deferred, elem ); } else if ( type === "function" ) { callbacks.push( elem ); } } if ( _fired ) { deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] ); } } return this; }, // resolve with given context and args resolveWith: function( context, args ) { if ( !cancelled && !fired && !firing ) { // make sure args are available (#8421) args = args || []; firing = 1; try { while( callbacks[ 0 ] ) { callbacks.shift().apply( context, args );//shifts a callback, and applies it to document } } finally { fired = [ context, args ]; firing = 0; } } return this; }, // resolve with this as context and given arguments resolve: function() { deferred.resolveWith( this, arguments ); return this; }, // Has this deferred been resolved? isResolved: function() { return !!( firing || fired ); }, // Cancel cancel: function() { cancelled = 1; callbacks = []; return this; } }; return deferred; }, type: function( obj ) { return obj == null ? String( obj ) : class2type[ Object.prototype.toString.call(obj) ] || "object"; } } // The DOM ready check for Internet Explorer function doScrollCheck() { if ( ReadyObj.isReady ) { return; } try { // If IE is used, use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ document.documentElement.doScroll("left"); } catch(e) { setTimeout( doScrollCheck, 1 ); return; } // and execute any waiting functions ReadyObj.ready(); } // Cleanup functions for the document ready method if ( document.addEventListener ) { DOMContentLoaded = function() { document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); ReadyObj.ready(); }; } else if ( document.attachEvent ) { DOMContentLoaded = function() { // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( document.readyState === "complete" ) { document.detachEvent( "onreadystatechange", DOMContentLoaded ); ReadyObj.ready(); } }; } function ready( fn ) { // Attach the listeners ReadyObj.bindReady(); var type = ReadyObj.type( fn ); // Add the callback readyList.done( fn );//readyList is result of _Deferred() } return ready; })();
사용하는 방법:
<script> ready(function(){ alert('It works!'); }); ready(function(){ alert('Also works!'); }); </script>
이 코드가 얼마나 기능적인지 잘 모르겠지만 피상적인 테스트에서는 잘 작동했습니다. 시간이 꽤 걸리므로 귀하와 다른 사람들이 혜택을 받을 수 있기를 바랍니다.
추신.: 컴파일 하는 것이 좋습니다.
또는 http://dustindiaz.com/smallest-domready-ever 를 사용할 수 있습니다.
function r(f){/in/.test(document.readyState)?setTimeout(r,9,f):f()} r(function(){/*code to run*/});
또는 새 브라우저만 지원해야 하는 경우 기본 기능(jQuery가 준비된 것과 달리 페이지가 로드된 후 추가하면 실행되지 않음)
document.addEventListener('DOMContentLoaded',function(){/*fun code to run*/})
세 가지 옵션:
script
가 본문의 마지막 태그인 경우 스크립트 태그가 실행되기 전에 DOM이 준비됩니다.준비 상태 변경
document.onreadystatechange = function () { if (document.readyState == "complete") { // document is ready. Do your stuff here } }
출처: MDN
DOMContentLoaded
document.addEventListener('DOMContentLoaded', function() { console.log('document is ready. I can sleep now'); });
석기 시대 브라우저에 대한 우려 : jQuery 소스 코드로 이동하여 ready
기능을 사용하십시오. 이 경우 전체 라이브러리를 구문 분석하고 실행하지 않고 아주 작은 부분만 수행합니다.
</body>
태그 바로 <script>/*JavaScript code*/</script>
를 배치합니다.
document.ready
에서 무언가를 하는 것보다 HTML 파일을 변경해야 하기 때문에 모든 사람의 목적에 적합하지 않을 수 있지만 여전히...
가난한 사람의 해결책:
var checkLoad = function() { document.readyState !== "complete" ? setTimeout(checkLoad, 11) : alert("loaded!"); }; checkLoad();
이것을 추가했습니다. 조금 더 나은 것 같습니다. 자체 범위 및 비 재귀 적
(function(){ var tId = setInterval(function() { if (document.readyState == "complete") onComplete() }, 11); function onComplete(){ clearInterval(tId); alert("loaded!"); }; })()
나는 이것을 사용한다:
document.addEventListener("DOMContentLoaded", function(event) { //Do work });
참고: 이것은 특히 다음과 같은 최신 브라우저에서만 작동합니다. http://caniuse.com/#feat=domcontentloaded
실제로 Internet Explorer 9 이상 에만 관심이 있다면 jQuery.ready
를 대체하기에 충분합니다.
document.addEventListener("DOMContentLoaded", callback);
Internet Explorer 6 과 정말 이상하고 희귀한 브라우저에 대해 걱정한다면 다음과 같이 작동합니다.
domReady: function (callback) { // Mozilla, Opera and WebKit if (document.addEventListener) { document.addEventListener("DOMContentLoaded", callback, false); // If Internet Explorer, the event model is used } else if (document.attachEvent) { document.attachEvent("onreadystatechange", function() { if (document.readyState === "complete" ) { callback(); } }); // A fallback to window.onload, that will always work } else { var oldOnload = window.onload; window.onload = function () { oldOnload && oldOnload(); callback(); } } },
이 질문은 꽤 오래 전에 제기되었습니다. 이 질문을 방금 본 사람을 위해 "Jquery가 필요하지 않을 수도 있습니다" 라는 사이트가 있습니다. 이 사이트는 필요한 IE 지원 수준에 따라 jquery의 모든 기능을 분류하고 몇 가지 대안적인 작은 라이브러리를 제공합니다.
IE8 문서 준비 스크립트 는 jquery가 필요하지 않을 수 있습니다.
function ready(fn) { if (document.readyState != 'loading') fn(); else if (document.addEventListener) document.addEventListener('DOMContentLoaded', fn); else document.attachEvent('onreadystatechange', function() { if (document.readyState != 'loading') fn(); }); }
2020년이고 <script>
태그에 defer
속성이 있습니다.
예를 들어:
<script src="demo_defer.js" defer></script>
페이지 구문 분석이 완료되면 스크립트가 실행되도록 지정합니다.
나는 최근에 이것을 모바일 사이트에 사용하고 있었습니다. 이것은 "Pro JavaScript Techniques"에서 John Resig의 단순화된 버전입니다. addEvent에 따라 다릅니다.
var ready = ( function () { function ready( f ) { if( ready.done ) return f(); if( ready.timer ) { ready.ready.push(f); } else { addEvent( window, "load", isDOMReady ); ready.ready = [ f ]; ready.timer = setInterval(isDOMReady, 13); } }; function isDOMReady() { if( ready.done ) return false; if( document && document.getElementsByTagName && document.getElementById && document.body ) { clearInterval( ready.timer ); ready.timer = null; for( var i = 0; i < ready.ready.length; i++ ) { ready.ready[i](); } ready.ready = null; ready.done = true; } } return ready; })();
브라우저 간(이전 브라우저도 마찬가지) 및 간단한 솔루션:
var docLoaded = setInterval(function () { if(document.readyState !== "complete") return; clearInterval(docLoaded); /* Your code goes here ie init() */ }, 30);
jQuery 답변은 나에게 꽤 유용했습니다. 약간의 리팩토링으로 내 요구에 잘 맞았습니다. 나는 그것이 다른 사람을 돕기를 바랍니다.
function onReady ( callback ){ var addListener = document.addEventListener || document.attachEvent, removeListener = document.removeEventListener || document.detachEvent eventName = document.addEventListener ? "DOMContentLoaded" : "onreadystatechange" addListener.call(document, eventName, function(){ removeListener( eventName, arguments.callee, false ) callback() }, false ) }
다음은 모든 브라우저(IE 8 포함)에서 작동하는 DOM 준비를 테스트하기 위한 가장 작은 코드 조각입니다.
r(function(){ alert('DOM Ready!'); }); function r(f){/in/.test(document.readyState)?setTimeout('r('+f+')',9):f()}
이 답변을 참조하십시오.
HTML 페이지 하단에 이것을 추가하기만 하면 됩니다...
<script> Your_Function(); </script>
HTML 문서는 위에서 아래로 구문 분석되기 때문입니다.
Rock Solid addEvent() 및 http://www.braksator.com/how-to-make-your-own-jquery 에서 살펴볼 가치가 있습니다.
사이트가 다운되는 경우의 코드는 다음과 같습니다.
function addEvent(obj, type, fn) { if (obj.addEventListener) { obj.addEventListener(type, fn, false); EventCache.add(obj, type, fn); } else if (obj.attachEvent) { obj["e"+type+fn] = fn; obj[type+fn] = function() { obj["e"+type+fn]( window.event ); } obj.attachEvent( "on"+type, obj[type+fn] ); EventCache.add(obj, type, fn); } else { obj["on"+type] = obj["e"+type+fn]; } } var EventCache = function(){ var listEvents = []; return { listEvents : listEvents, add : function(node, sEventName, fHandler){ listEvents.push(arguments); }, flush : function(){ var i, item; for(i = listEvents.length - 1; i >= 0; i = i - 1){ item = listEvents[i]; if(item[0].removeEventListener){ item[0].removeEventListener(item[1], item[2], item[3]); }; if(item[1].substring(0, 2) != "on"){ item[1] = "on" + item[1]; }; if(item[0].detachEvent){ item[0].detachEvent(item[1], item[2]); }; item[0][item[1]] = null; }; } }; }(); // Usage addEvent(window, 'unload', EventCache.flush); addEvent(window, 'load', function(){alert("I'm ready");});
나는 PlainJS 에서 답을 선택했고 그것은 나를 위해 잘 작동합니다. 모든 브라우저에서 허용될 수 있도록 DOMContentLoaded
확장합니다.
이 함수는 jQuery의 $(document).ready()
메서드와 동일합니다.
document.addEventListener('DOMContentLoaded', function(){ // do something });
그러나 jQuery와 달리 이 코드는 최신 브라우저(IE > 8)에서만 제대로 실행되며 이 스크립트가 삽입될 때 문서가 이미 렌더링된 경우(예: Ajax를 통해) 실행되지 않습니다. 따라서 이것을 약간 확장해야 합니다.
function run() { // do something } // in case the document is already rendered if (document.readyState!='loading') run(); // modern browsers else if (document.addEventListener) document.addEventListener('DOMContentLoaded', run); // IE <= 8 else document.attachEvent('onreadystatechange', function(){ if (document.readyState=='complete') run(); });
이것은 기본적으로 모든 가능성을 다루며 jQuery 도우미에 대한 실행 가능한 대체품입니다.
이 브라우저 간 코드는 DOM이 준비되면 함수를 호출합니다.
var domReady=function(func){ var scriptText='('+func+')();'; var scriptElement=document.createElement('script'); scriptElement.innerText=scriptText; document.body.appendChild(scriptElement); };
작동 방식은 다음과 같습니다.
domReady
의 첫 번째 줄은 toString
메서드를 호출하여 전달한 함수의 문자열 표현을 가져오고 함수를 즉시 호출하는 표현식으로 래핑합니다.domReady
는 표현식으로 스크립트 요소를 생성하고 문서 body
body
추가된 스크립트 태그를 실행합니다. 예를 들어 다음과 같이 하면 domReady(function(){alert();});
, 다음이 body
요소에 추가됩니다.
<script>(function (){alert();})();</script>
이것은 사용자 정의 함수에서만 작동합니다. 다음은 작동하지 않습니다: domReady(alert);
jQuery와 비교하여 JavaScript에 상응하는 것을 사용하는 것이 항상 좋습니다. 한 가지 이유는 의존할 라이브러리가 하나 적고 jQuery에 상응하는 것보다 훨씬 빠릅니다.
jQuery 등가물에 대한 환상적인 참조 중 하나는 http://youmightnotneedjquery.com/ 입니다.
귀하의 질문에 관한 한 위의 링크에서 아래 코드를 가져왔습니다. 주의 사항은 Internet Explorer 9 이상 에서만 작동한다는 것입니다.
function ready(fn) { if (document.readyState != 'loading') { fn(); } else { document.addEventListener('DOMContentLoaded', fn); } }
이 솔루션은 어떻습니까?
// other onload attached earlier window.onload=function() { alert('test'); }; tmpPreviousFunction=window.onload ? window.onload : null; // our onload function window.onload=function() { alert('another message'); // execute previous one if (tmpPreviousFunction) tmpPreviousFunction(); };
최소한의 구현으로 가장 간단한 경우에 트릭을 수행할 수 있는 빠르고 더러운 크로스 브라우저 구현을 찾았습니다.
window.onReady = function onReady(fn){ document.body ? fn() : setTimeout(function(){ onReady(fn);},50); };
여기(아래 스니펫에서)는 사용 가능한 브라우저 "내장" 방법과 그 실행 순서를 비교한 것입니다. 비고
document.onload
(X)는 최신 브라우저에서 지원되지 않습니다(이벤트가 발생 하지 않음).<body onload="bodyOnLoad()">
(F)를 사용하고 동시에 window.onload
(E)를 사용하면 첫 번째 항목만 실행됩니다(두 번째 항목을 재정의하기 때문에)<body onload="...">
(F)에 제공된 이벤트 핸들러 onload
함수에 의해 래핑됩니다.document.onreadystatechange
(D) document .addEventListener('readystatechange'...)
(C) 아마도 onXYZevent onXYZevent-like
addEventListener
대기열(여러 리스너 추가를 허용함)과 독립적일 수 있습니다. 아마도 이 두 핸들러가 실행되는 사이에는 아무 일도 일어나지 않을 것입니다.div
액세스할 수 있는 스크립트는 본문에도 타임스탬프를 씁니다(스크립트 실행 후 "전체 페이지" 링크를 클릭하면 볼 수 있음).readystatechange
(C,D)는 브라우저에 의해 여러 번 실행되지만 다른 문서 상태에 대해 실행됩니다.DOMContentLoaded
body/window onload
<html> <head> <script> // solution A console.log(`[timestamp: ${Date.now()}] A: Head script`) ; // solution B document.addEventListener("DOMContentLoaded", () => { print(`[timestamp: ${Date.now()}] B: DOMContentLoaded`); }); // solution C document.addEventListener('readystatechange', () => { print(`[timestamp: ${Date.now()}] C: ReadyState: ${document.readyState}`); }); // solution D document.onreadystatechange = s=> {print(`[timestamp: ${Date.now()}] D: document.onreadystatechange ReadyState: ${document.readyState}`)}; // solution E (never executed) window.onload = () => { print(`E: <body onload="..."> override this handler`); }; // solution F function bodyOnLoad() { print(`[timestamp: ${Date.now()}] F: <body onload='...'>`); infoAboutOnLoad(); // additional info } // solution X document.onload = () => {print(`document.onload is never fired`)}; // HELPERS function print(txt) { console.log(txt); if(mydiv) mydiv.innerHTML += txt.replace('<','<').replace('>','>') + '<br>'; } function infoAboutOnLoad() { console.log("window.onload (after override):", (''+document.body.onload).replace(/\s+/g,' ')); console.log(`body.onload==window.onload --> ${document.body.onload==window.onload}`); } console.log("window.onload (before override):", (''+document.body.onload).replace(/\s+/g,' ')); </script> </head> <body onload="bodyOnLoad()"> <div id="mydiv"></div> <!-- this script must te at the bottom of <body> --> <script> // solution G print(`[timestamp: ${Date.now()}] G: <body> bottom script`); </script> </body> </html>
아주 오래된 브라우저를 지원할 필요가 없다면 외부 스크립트가 async 속성으로 로드된 경우에도 지원하는 방법이 있습니다.
HTMLDocument.prototype.ready = new Promise(function(resolve) { if(document.readyState != "loading") resolve(); else document.addEventListener("DOMContentLoaded", function() { resolve(); }); }); document.ready.then(function() { console.log("document.ready"); });
나는 단순히 다음을 사용합니다.
setTimeout(function(){ //reference/manipulate DOM here });
document.addEventListener("DOMContentLoaded" //etc
와 달리 최상위 답변에서와 같이 IE9까지 작동합니다. http://caniuse.com/#search=DOMContentLoaded 는 IE11까지만 나타냅니다.
흥미롭게도 2009년 setTimeout
솔루션을 우연히 발견했습니다. DOM의 준비 상태를 확인하는 것이 과도합니까? "DOM의 준비 상태를 확인하기 위해 다양한 프레임워크의 보다 복잡한 접근 방식을 사용하는 것이 과도한가?"
이 기술이 작동하는 이유에 대한 가장 좋은 설명은 이러한 setTimeout이 있는 스크립트에 도달했을 때 DOM이 구문 분석되는 중이므로 해당 작업이 완료될 때까지 setTimeout 내의 코드 실행이 지연된다는 것입니다.
이것은 작동해야 합니다:
document.addEventListener('DOMContentLoaded', function() { /* alert('Page loaded!'); some code more code */ });
IE9+의 경우:
function ready(fn) { if (document.readyState != 'loading'){ fn(); } else { document.addEventListener('DOMContentLoaded', fn); } }
여기에 내가 사용하는 것이 있습니다. 빠르고 모든 기반을 다룹니다. IE <9를 제외한 모든 경우에 작동합니다.
(() => { function fn() { // "On document ready" commands: console.log(document.readyState); }; if (document.readyState != 'loading') {fn()} else {document.addEventListener('DOMContentLoaded', fn)} })();
이것은 모든 경우를 잡는 것 같습니다.
DOMContentLoaded 이벤트는 IE9 및 기타 모든 것에서 사용할 수 있으므로 개인적으로 이것을 사용하는 것이 좋다고 생각합니다. ES2015에서 ES5로 코드를 변환하지 않는 경우 화살표 함수 선언을 일반 익명 함수로 다시 작성하십시오.
모든 자산이 로드되고 모든 이미지가 표시될 때까지 기다리려면 대신 window.onload를 사용하십시오.
여기에 제시된 setTimeout/setInterval 솔루션은 특정 상황에서만 작동합니다.
문제는 특히 8 이하의 이전 Internet Explorer 버전에서 나타납니다.
이러한 setTimeout/setInterval 솔루션의 성공에 영향을 미치는 변수는 다음과 같습니다.
1) dynamic or static HTML 2) cached or non cached requests 3) size of the complete HTML document 4) chunked or non chunked transfer encoding
이 특정 문제를 해결하는 원본(네이티브 자바스크립트) 코드는 다음과 같습니다.
https://github.com/dperini/ContentLoaded http://javascript.nwbox.com/ContentLoaded (test)
이것은 jQuery 팀이 구현을 구축한 코드입니다.
BODY 하단 부근에 jQuery를 로드하고 있는데 jQuery(<func>) 또는 jQuery(document).ready(<func>)를 작성하는 코드에 문제가 있는 경우 Github 에서 jqShim을 확인하십시오.
자체 문서 준비 기능을 다시 만드는 대신 jQuery를 사용할 수 있을 때까지 기능을 유지한 다음 예상대로 jQuery를 진행합니다. jQuery를 본문의 맨 아래로 이동하는 요점은 페이지 로드 속도를 높이는 것이며 템플릿 헤드에 jqShim.min.js를 인라인하여 여전히 수행할 수 있습니다.
나는 WordPress의 모든 스크립트를 바닥글로 옮기기 위해 이 코드를 작성했고 이제 이 shim 코드만 머리글에 직접 위치합니다.
function onDocReady(fn){ $d.readyState!=="loading" ? fn():document.addEventListener('DOMContentLoaded',fn); } function onWinLoad(fn){ $d.readyState==="complete") ? fn(): window.addEventListener('load',fn); }
onDocReady 는 HTML dom이 완전히 액세스/분석/조작할 준비가 되었을 때 콜백을 제공합니다.
onWinLoad 는 모든 것이 로드되었을 때(이미지 등) 콜백을 제공합니다.
(function(f){ if(document.readyState != "loading") f(); else document.addEventListener("DOMContentLoaded", f); })(function(){ console.log("The Document is ready"); });
출처 : http:www.stackoverflow.com/questions/799981/document-ready-equivalent-without-jquery
Node.js를 언제 사용할지 결정하는 방법은 무엇입니까? (0) | 2021.11.29 |
---|---|
Docker: Docker 컨테이너에서 호스트로 파일 복사 (0) | 2021.11.29 |
JUnit 4 테스트에서 특정 예외가 발생했다고 어떻게 주장합니까? (2) | 2021.11.29 |
요소별 추가가 결합된 루프보다 개별 루프에서 훨씬 빠른 이유는 무엇입니까? (0) | 2021.11.29 |
두 커밋 사이에 변경된 파일 이름만 나열하는 방법 (0) | 2021.11.29 |