Tôi cần phải đợi tài liệu sẵn sàng trong JavaScript của tôi, để chèn một div ở dưới cùng của cơ thể.
Tôi muốn:
- Tạo file JavaScript này càng nhỏ càng tốt (biên dịch nó xuống để < 1kb nếu có thể)
- inline mã mà cung cấp readyness tài liệu trong một đóng cửa (không có xuất khẩu nó)
Nội tuyến toàn bộ nguồn jQuery trong tệp của tôi sẽ quá lớn, vì vậy tôi đang tìm các phương pháp khác. window.onload
sẽ hoạt động, nhưng tôi đặc biệt muốn sẵn sàng tài liệu và không đợi sự kiện window.onload
.
Có ai biết đoạn mã JS có thể thực hiện việc này không? Hoặc tôi chỉ cần sao chép một phần của nguồn jQuery?
EDIT:
tôi quản lý để thu thập dữ liệu nguồn jQuery và đặt cùng với đoạn mã sau:
var ready = (function() {
var ready_event_fired = false;
var ready_event_listener = function (fn) {
// Create an idempotent version of the 'fn' function
var idempotent_fn = function() {
if (ready_event_fired) {
return;
}
ready_event_fired = true;
return fn();
}
// The DOM ready check for Internet Explorer
var do_scroll_check = function() {
if (ready_event_fired) {
return;
}
// If IE is used, use the trick by Diego Perini
// http://javascript.nwbox.com/IEContentLoaded/
try {
document.documentElement.doScroll('left');
} catch(e) {
setTimeout(do_scroll_check, 1);
return;
}
// Execute any waiting functions
return idempotent_fn();
}
// If the browser ready event has already occured
if (document.readyState === "complete") {
return idempotent_fn()
}
// Mozilla, Opera and webkit nightlies currently support this event
if (document.addEventListener) {
// Use the handy event callback
document.addEventListener("DOMContentLoaded", idempotent_fn, false);
// A fallback to window.onload, that will always work
window.addEventListener("load", idempotent_fn, 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", idempotent_fn);
// A fallback to window.onload, that will always work
window.attachEvent("onload", idempotent_fn);
// 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) {
return do_scroll_check();
}
}
};
return ready_event_listener;
})();
// TEST
var ready_1 = function() {
alert("ready 1");
};
var ready_2 = function() {
alert("ready 2");
};
ready(function() {
ready_1();
ready_2();
});
Cảm ơn bạn rất nhiều vì đã giúp tôi tìm thấy điều này trong nguồn jQuery. Bây giờ tôi có thể đặt tất cả điều này trong một đóng cửa và làm công việc của tôi mà không xuất khẩu bất kỳ chức năng và gây ô nhiễm phạm vi toàn cầu.
Bạn có thể lấy nguồn jQuery từ máy chủ của Google, trong đó sẽ cung cấp cho bạn một sự thay đổi tốt đẹp của nó là cachedd rồi. – Pointy