를하지만, 대체 솔루션은 닫는 </body>
태그 앞에, 몸의 끝에서 스크립트를 단지를 포함하는 것입니다 :
jQuery.ready.promise = function(object) {
if (!readyList) {
readyList = jQuery.Deferred();
// Catch cases where $(document).ready() is called after the
// browser event has already occurred.
if (document.readyState !== "loading") {
// Handle it asynchronously to allow scripts the opportunity to delay ready
setTimeout(jQuery.ready, 1);
// Mozilla, Opera and webkit nightlies currently support this event
} else 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", jQuery.ready, false);
// If IE event model is used
} else {
// 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", jQuery.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();
}
}
}
return readyList.promise(object);
};
현재 위치를 볼 수 있습니다. 이렇게하면 jQuery의 축소 버전을 포함하지 않고도 동일한 결과를 얻을 수 있습니다.
document.ready 함수의 포인트는 DOM 준비가 완료된 후, 즉 브라우저가 모든 HTML을 파싱하고 자바 스크립트에서 조작 할 준비가 된 후에 호출된다는 것입니다. 본문 끝 부분에 JS 코드를 넣으면 브라우저가 문서를 파싱하는 동안 JavaScript를 실행하고 JS가 실행될 때 이미 구문 분석 된 DOM 요소에 액세스 할 수 있기 때문에 동일한 효과가 발생합니다. 위의 스크립트 블록 내에서 (인라인 포함 된 경우
// CHANGE THE FOLLOWING:
$(document).ready(function() {
var myField = document.getElementById("someId");
alert(myField.value);
});
// TO BE
var myField = document.getElementById("someId");
alert(myField.value);
그것은 중요하지 않습니다 : 당신은 당신의 코드가 실행 될 방법을 묻는 의견에이 아이디어를 언급
, 그래서 여기에 간단한 예제), 또는 본문 끝에있는 한 스크립트 태그에 포함 된 외부 JS 파일에 저장됩니다.
유일한 문제는 코드가 함수 내에 포함되어 있지 않기 때문에 전역 변수를 생성한다는 것입니다. 일반적으로 피하기를 원하지 않는 것은 미래에 다른 외부 라이브러리를 포함하려고 시도 할 수 있기 때문입니다 동일한 이름의 변수를 정의 할 수 있습니다. - 익명 함수 주위에 사람이 함수 표현보다는이 아무튼 의미 함수 선언 (수 있도록 여분의 괄호가
(function() {
var x = "these variables are not global",
myField = document.getElementById("someId");
alert(myField.value);
function test() {
alert("this function isn't global either");
}
test();
})();
참고 : 당신은 즉시 호출 익명 함수 표현식에서 코드를 래핑하여이 문제를 방지 할 수 있습니다 이름이 필요 없다), 결국에는 함수가 즉시 호출된다.
지금 읽고있는 스택 오버플로 페이지에서 페이지 소스를 보면 몸의 끝에 JS를 배치 한 실제 사례를 볼 수 있습니다.
축소 된 버전을 압축하면 32KB btw가됩니다 –
압축 방법이 무엇인지 물어볼 수 있습니까? 제 생각에 32kb는 원래의 94.8k보다 상대적으로 수용 가능합니다 –
gzip 인코딩을 사용하여 내용을 반환하도록 서버를 구성하거나 여러 가지 CDN 호스팅 솔루션 중 하나를 선택할 수 있습니다. http://docs.jquery.com/Downloading_jQuery –