2012-07-17 50 views
1

我的意思是,如果我創建一個jQuery和DOM可以jQuery的獲取尚未繪製的動態元素的大小

var MainHolder = $(document.createElement("div")).addClass("box"); 

一個元素,如果我是叫MainHolder.width()沒有窗口繪製元素它會變得更聰明,並得出它從.box CSS類的寬度,或者它只是返回0,因爲它沒有被繪製,所以它不能解決它?

+1

難道你還沒有自己嘗試過嗎? http://jsfiddle.net/uk3wU/(答案是它返回0)。 – Matt 2012-07-17 13:14:45

+0

我打算,但我雖然我會先搜索,但它不在這裏,所以我雖然這將是有用的答案在網站上:) SEO和所有 – HotHeadMartin 2012-07-17 13:26:38

回答

4

你可以借鑑的元素,得到了寬度,拉開它:

var MainHolder = $(document.createElement("div")).addClass("box").css({ 
    position: "absolute", 
    left: -9999 
}).appendTo("body"); 

var width = MainHolder.width(); 

MainHolder.css({ 
    position: "static", 
    left: "auto" 
}).detach(); 
+0

謝謝這是最完整的答案 – HotHeadMartin 2012-07-17 13:43:29

0

Jquery無法獲取未繪製的元素的寬度。

我之前做過的事情是將元素的頂部邊距設置爲-1000,並將位置設置爲絕對值,然後獲取寬度和高度,然後將頂部邊距設置爲正確。

2

使用jQuery .width()您只能獲取HTML文檔中元素的寬度。

在我的例子下面我給自己定的CSS寬度200px

Example without appended to HTML body - returns 0

Example when appended to HTML body - returns 200

我相信這種情況的主要原因是在應用box的元素和期待對於.box規則,如果您有諸如.container .box.container2 .box的規則,則不起作用。 jQuery需要知道該元素在文檔中的位置,以瞭解它將具有的寬度。

0

在我看來,$.hide()比CSS定位爲達到更好的效果。具有left: -9999的元素可能仍然可見,具體取決於其他CSS樣式。

$('<div></div>').addClass('box').hide().appendTo('body').width() 

jsfiddle

相關問題