2009-11-07 46 views
0

我收到了一個奇怪的錯誤,使用jQuery 1.3.2和Firefox。我已經創建了一個元素一個小的彈出窗口,我使用的代碼jquery AppendTo在Firefox中添加錯誤

var popupWindow = $($('#template')[0].innerHTML).css(
      'top', top).css(
      'left', left).css(
      'position', 'absolute').css(
      'opacity', '1'); 

然後我用追加()和AppendTo()函數來基本上提供,我試圖確定的高度和寬度,但得到JS示每下面

var right = left + $(popupWindow).width(); // empty width, js exception 
var bottom = top + $(popupWindow).height(); //empty height, js exception 

popupWindow異常錯誤的追加()命令,但隨後是不可能的,因爲他們arent FF-DOM內可見得到寬度,高度的元件。

在IE中一切正常,但不是在Firefox

有沒有人有任何想法,因爲我一直在嘗試幾個小時,並得到一堵磚牆。

回答

0

我不完全知道爲什麼你正在使用

var popupWindow = $($('#template')[0].innerHTML) 

基本上轉化爲

「得到有模板的ID(這將implcitly只有一個元素元素用於有效的HTML),然後獲取第一個元素的innerHTML,然後將包含在innerHTML中的任何元素包裝在jQuery對象中。「

爲什麼不直接使用

var popupWindow = $('#template').css({ 
         top : top, 
         left: left, 
         position: 'absolute', 
         opacity: 1 }); 

而且,可能要考慮使用一個類來代替內聯CSS的。如果您需要進一步的幫助,請發佈html佈局。

+0

嗨解決方案最終以正確的方式指向我。我使用cloneNode修復了它,並且解決了錯誤。 :) – Thomas 2009-11-07 13:39:48

+0

@Thomas - 你可以發佈你使用的HTML,因爲可能有更簡單的方法來做你想做的事情。 – 2009-11-07 13:45:36

0
var popupWindow = $($('#template')[0].innerHTML) 

是的,你真的不想這樣做。

這將獲得模板div的HTML並將其發送到$()函數,這是一個多用途函數。根據#template的內容是什麼,它可能會創建一些HTML(可能包含多個元素,丟棄任何即時文本內容),或者可能將其視爲選擇器並從頁面中選擇匹配元素。

(這不是我最喜歡的jQuery的功能之一。)

此外,使用innerHTML與jQuery有副作用,在jQuery的添加自己的屬性元素,以確定它們添加數據和事件處理程序。如果您複製IE < 8上的innerHTML(它有一個它認爲屬性和屬性相同的錯誤),您將無意中複製這些jQuery內部標識,從而製作相同元素的兩個副本並混淆庫。你應該使用.html()來獲得jQuery的標記;這在使用標記之前使用一個破壞性的RegExp來嘗試去除內部ID屬性。

(這也不是我最喜歡的jQuery特性之一。)

如果你只是想設置的模板元素上的樣式,這樣說:

var popupWindow= $('#template'); 
popupWindow.css({top: '1px', left: '2px', ...}); 

如果你想使模板的副本,並設置了樣式:

var popupWindow= $('#template').clone(); 
popupWindow.css(...); 

也沒有必要說:

$(popupWindow) 

爲popupWindow已經是一個jQuery的包裝。你只是讓它做內部元素列表的另一個副本。

js exception 

什麼異常?就我個人而言,我沒有例外,但這很大程度上取決於您放入#template的內容。