2010-11-15 74 views
1

問題很簡單,但找不到解決方案。非常感謝那些幫助的人。 我想在網頁(DOM樹)顯示在屏幕上之前修改它。 我知道在處理之前,DOM樹已完全加載到內存中。如何在屏幕上顯示DOM樹之前操作DOM樹? (javascript,jquery,...)

你們有沒有人知道一種方法來處理這個完全加載的DOM樹,同時它在內存中 ,然後讓它顯示其新結構?

我想這樣做的原因,是因爲我正在爲將內容添加到現有網站的插件工作。

added->只需要提一下,現有的網站不是我的,所以我不能使用php來修改網站內容不是我的。

但現在,網站顯示時沒有插件內容 ,並且您看到內容在1秒後出現(因爲我在網站已顯示之後追加內容),因此您會看到網站內容在移動。

感謝您的幫助。

+0

我想我會通過插件修改接收到的'客戶端'的DOM,因爲它比等待服務器進行更改要快。 – developerGuile 2010-11-15 19:55:41

回答

0

我終於找到了解決方案。

我使插件看着網頁導航。實際上,它會查看URL更改,以便我知道用戶正在移動到不同的位置(因此,我知道在得到網頁的「加載」事件之前我必須做些事情)。

然後,我只是嘗試訪問一個元素(我知道會在DOM中,像頭)使用循環。然後,當元素出現時(在「Load」事件之前),我插入代碼並停止循環/偵聽。

如果有人需要更詳細的信息,我會很樂意回答你的問題。

謝謝。

4

這不是很困難。只需使用CSS隱藏身體並在文檔的onload事件上進行操作並顯示身體。

短的例子:

<html> 
<head> 
<title>example</title> 
<style type="text/css"> 
<!-- 
html.scripted body{display:none;} 
--> 
</style> 
<script type="text/javascript"> 
<!-- 
//set class for html-element, so the css-rule above will be applied to the body 
document.getElementsByTagName('html')[0].className='scripted'; 

//on page load 
window.onload=function() 
{ 
    //do the manipulation 
    document.body.appendChild(document.createElement('em')).appendChild(document.createTextNode('dynamic content')); 
    alert('manipulation done'); 

    //show the body 
    document.body.style.display='block'; 
} 
//--> 
</script> 
</head> 
<body> 
static content 
</body> 
</html> 

至於下面你布拉德的評論可能會考慮是否有可能是其他方式。由於真正的問題似乎是移動的內容,因此可能會放置一個靜態佔位符,以便稍後顯示動態內容。

+0

請不要這樣做。瀏覽器逐漸渲染頁面。沒有理由隱藏用戶的部分頁面。撥號用戶會特別討厭你,因爲他們經常在完成加載之前瀏覽頁面。 – Brad 2010-11-15 16:47:06

0

在加載DOM之前操縱DOM的唯一方法是使用像php這樣的預處理器。

Javascript只能在加載後操作DOM。

對於超出,任何進一步的幫助,你就必須在你的標籤提供:-)

1

你提到的PHP更具體的例子,那麼爲什麼不建立自己的文件服務器端?那麼,沒關係。

如果你必須做這個客戶端,那麼我也不會擔心這一點。無論如何,網頁都會呈現出來。也許你有一臺快速的計算機和快速連接到你的服務器,但我保證你的大部分用戶不會。

只需在DOM準備好的位添加一些代碼以使頁面增強。相關:Javascript DOM ready without an entire framework

+0

只是補充說,我不能使用PHP導致我想添加功能的網站不會在我們的服務器上運行。 – developerGuile 2010-11-15 19:51:57

+0

然後,從標題和標籤中取出PHP。 – Brad 2010-11-15 19:57:00

+0

完成!拿出標題和標籤的PHP。 – developerGuile 2010-11-15 20:25:20