2010-12-23 73 views
7

我很新的JavaScript。Javascript文檔寫覆蓋頁面?

我正在嘗試使用document.write(使用Wordpress)創建一個標籤,以添加在預加載之前隱藏圖像的樣式。我不得不求助於編寫Javascript樣式,以便在通過CSS加載圖像之前隱藏圖像。我不想實際將它寫入CSS文件,因爲用戶禁用Javascript,然後圖像將永遠不會顯示。

我試圖讓這個代碼工作:

jQuery(function($) { 
    document.write('<style type="text/css"> .preload img { display: none; } </style>'); 
    $('#body-wrap').preloadThis(); 
}); 

但是,這僅僅是覆蓋整個頁面,並使它變爲空白。我怎樣才能阻止呢?我想在不刪除頁面的情況下添加標籤。嘗試使用「返回」,沒有運氣。

對不起,我是新手。提前致謝。

回答

18

使用document.write()頁面完成加載後implicitly calls document.open(),它創建一個新的頁面。通常應避免document.write()和堅持正確的DOM創作技法,或使用jQuery的簡寫創建方法:

jQuery(function($) { 
    $('<style type="text/css"> .preload img { display: none; } </style>') 
     .appendTo("head"); 
    $('#body-wrap').preloadThis(); 
}); 


我假設你不能編輯由該頁面加載到HTML或CSS文件包括這個規則?如果是這樣的話,你想這些樣式的頁面應用前完成加載,採取 document.write()了jQuery的準備處理程序:

// write() before the document finishes loading 
document.write('<style type="text/css"> .preload img { display: none; } </style>'); 
jQuery(function($) { 
    $('#body-wrap').preloadThis(); 
}); 

這將當前執行的<script>標籤後立即寫<style>標籤。希望這是在<head>元素中,因爲<style>在其他任何地方都是無效的,儘管所有瀏覽器都應該以任何方式解析它。

+0

同樣的問題與使用.hide()。當圖像緩存(加載以前的頁面加載)施加了jQuery纔可見。這會導致圖像在被隱藏之前出現,然後被預加載插件淡入。嘗試在隱藏之前擺脫閃爍。 – 2010-12-23 16:44:56

+0

@Matthew:我已經更新了我的答案。如果頁面還沒有完成加載,使用`document.write`是安全的,所以如果你把它從jQuery的文檔預處理器中取出,你應該沒問題。 – 2010-12-23 17:00:36

3

你並不需要添加<style>標籤,你可以隱藏他們使用jQuery:

jQuery(function($) { 
    $('.preload img').hide(); 
    $('#body-wrap').preloadThis(); 
}); 

不知道你preloadThis()功能是如何工作的,但我想它加載圖像和刪除.preloadimg集裝箱。如果確實如此,這段代碼不會幫助你 - 圖像將保持隱藏狀態。