2010-04-25 59 views
1

我不太熟悉JavaScript,有沒有一種方法可以在向用戶顯示頁面之前操作DOM?在將DOM顯示給用戶之前操​​縱DOM?

我正在使用GWT,它使您通過JavaScript創建頁面元素。這很方便,但是看起來所有的javascript代碼都是在頁面首次顯示給用戶之後執行的。這具有將頁面顯示爲空白屏幕,然後將所有UI元素彈出到屏幕上的效果。在頁面之間切換時效果非常明顯。

如果我使用的是php或jsp,它看起來像頁面UI元素已經預渲染並且瀏覽器在顯示之前不會顯示空白的白色屏幕。

所以有沒有在javascript中的任何鉤子,我們可以在瀏覽器清除顯示的最後一頁的內容之前操縱DOM?

--------------------------------編輯------------- ---------------------------

@Cipi:我不確定這是否可行,但我可以嘗試。我認爲這將是同樣的問題,但?我仍然看到它是這樣發生的:

  1. 用戶已經在我的一個頁面上。
  2. 用戶單擊鏈接。
  3. 瀏覽器開始提取新網址的內容,但內容僅僅是一個空的html文件,只有一個javascript鏈接。
  4. 頁面完成下載後,瀏覽器渲染html(這只是一個白色屏幕)。
  5. 現在JavaScript開始執行,以響應onLoad()事件(?),構建UI。
  6. 幾毫秒後,DOM完成了操作,最終呈現給用戶。

所以我認爲你的解決方案將發生在#5,但到那時瀏覽器已經呈現了第4步的初始頁面的內容?

@Crozin:我期待到現在DOMContentLoaded,似乎專門針對基於壁虎的瀏覽器但也有即等等。是的,我基本上要操作DOM瀏覽器呈現什麼新頁面屏幕之前,解決方案希望這可以做到。

感謝

+0

那麼當您使用在服務器上生成網頁PHP,所以客戶端加載它全部完成繪製...你可以嘗試在HTML頁面,這樣的開始隱藏主DIV元素: '',然後讓所有其他函數和html被加載,並且在標籤放置之前:'因此它顯示了離屏渲染的內容......你可以用jQuery來做到這一點:'$(「#main」)。hide()'和'$(「#main」)。show()' – Cipi 2010-04-25 15:52:07

+0

Arghh yeah no幸運的是,我把上面的一個編輯,我認爲瀏覽器將只呈現空白頁面,它不會傷心地保留最後一頁的內容在屏幕緩衝區(或者我猜其他所有purpii)。 – user246114 2010-04-25 16:41:06

回答

1

是有兩種方法:

  1. 使用DOMContentLoaded事件
  2. 在下面的代碼:

    .... 
    <p id="abc">abc</p> 
    <script type="text/javascript"> CODE HERE </script> 
    <p id="def">def</p> 
    

    元素ID爲abc是繳費,但一ID爲def不是。