2010-07-23 76 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