2010-07-23 34 views
2

我嘗試使用jQuery創建一個非DOM DOM元素(我避免直接​​通過jQuery接觸DOM,因此我會在一定程度上對待它們的包裝集和DOM元素)並將.tabs()函數應用於它,並且稍後纔將該元素添加到DOM中。這些標籤類型的工作和種類沒有。看起來好像(從猜測)或許事件處理程序已經搞亂了。點擊一個標籤突出顯示,但什麼也沒做。非當前選擇的標籤內容全部顯示。這是一個奇怪的效果。爲什麼一些jQuery UI操作在非DOM DOM元素上失敗?

我只改變了一件事 - 在調用.tabs()之前,我先將無形元素附加到實際的DOM樹中。一切正常。

這實際上解決了我當前的實際問題,因爲我做了一些更多的閱讀,並意識到我製作非實體元素的動機是基於對JavaScript和DOM呈現之間的瀏覽器執行效果的細微誤解。 (我沒有意識到渲染器在JavaScript完成之前不會重新獲得控制權,這讓我們回想起來更有意義 - 我確定一種真正的多線程方法將會是瀏覽器製造商的併發惡夢...... )

無論如何,這仍然留下了一個非常有趣的理論問題。這是怎麼回事?無形元素和附着元素有什麼區別? jQuery UI如何發揮呢?我想更深層次地理解這些內容。

(我無法找到與一些粗略的谷歌搜索任何東西。不要驚訝,因爲它似乎是,當你糾正誤解我了,對無形要素運行的jQuery UI的操作在實踐中是非常沒有意義的。)

下面是一些代碼:

// doesn't work right 
var disembodied = $('<div>.......html goes here....</div>'); 
$(disembodied).tabs(); 
$('div#receptacle').append(disembodied); 

// does work right 
var disembodied = $('<div>.......html goes here....</div>'); 
$('div#receptacle').append(disembodied); 
$(disembodied).tabs(); 

回答

1

的問題是,當標籤代碼搜索面板的每個選項卡它的body不是當前元素選擇搜索。這在標籤已經在文檔中時起作用,但當它們不在時則起作用。

修復很簡單。剛剛在_tabify功能

self.panels = self.panels.add(self._sanitizeSelector(href)); 

改變這一行

self.panels = self.panels.add(self._sanitizeSelector(href), self.element); 

我已提交了一張票,讓在jQuery UI的這種變化。 http://dev.jqueryui.com/ticket/5857

+0

好吧,酷!這解釋了一切。謝謝。 – 2010-07-23 19:04:04