2010-05-18 26 views
4

我想要測量JavaScript中文本的大小。到目前爲止,這並不困難,因爲我可以簡單地將臨時不可見的div放入DOM樹中,並檢查offsetWidth和offsetHeight。問題是,我想在DOM準備好之前這樣做。這裏是一個存根:使用JavaScript測量文本大小

<html> 
    <head> 
    <script type="text/javascript"> 

    var text = "Hello world"; 
    var fontFamily = "Arial"; 
    var fontSize = 12; 

    var size = measureText(text, fontSize, fontFamily); 

    function measureText(text, fontSize, fontFamily) 
    { 
     // TODO Implement me! 
    }  

    </script> 
    </head> 
    <body> 
    </body> 
</html> 

還是那句話:我知道如何做到這一點時,異步DOM(或機構)的信號,它已準備就緒。但是我想在標題中同步執行它,如上面的存根所示。任何想法我可以做到這一點?我目前的觀點是,這是不可能的,但也許有人有一個瘋狂的想法。

+0

可能的重複? http://stackoverflow.com/questions/118241/calculate-text-width-with-javascript – jigfox 2010-05-18 11:24:08

回答

4

您不必等到整個DOM準備就緒,只需要它的位就可以了。

將腳本移動到<body>之內。現在document.body存在,所以你可以document.body.insertBefore(myspan, document.body.firstChild)。 (但不要appendChild,否則你會被戴上的解析器在頂部的元素,通常會打破IE)

可能有更復雜的解決方法(可能用帆布和measureText()的呢? ),但這將是最容易的。

1

對不起,但沒有瘋狂的想法。當DOM沒有準備好時,就不可能爲它添加一個節點,所以在你想要的時刻不可能做到你想要的。

更早的事件存在並告訴您DOM準備好了DOMContentLoaded事件,它在不同的瀏覽器實現中有其他名稱。