2008-11-25 55 views
5

我在基於wiki的CMS中使用Fish小工具(http://abowman.com/google-modules/fish/),並且需要將小工具從一個HTML元素重新定位到另一個HTML元素。 (注意:魚小工具就是一個例子 - 其他小工具也會遇到問題。)移動包含動態創建的腳本標記的DOM元素

如果我使用小工具基類「ig_reset」直接重新定位小工具,那麼一切正常。如果我嘗試使用周圍包裝進行重新定位,那麼小工具使用的iframe似乎會接管。不幸的是,我需要使用周圍包裝重新定位的靈活性。

這似乎與在DOM中移動SCRIPT標籤有關。該小工具動態地創建腳本和樣式標籤。如果我從DOM中刪除動態創建的腳本標記,然後將包裝程序重新定位到DOM中的另一個位置,這一切都很好。如果我嘗試腳本標記移動到另一個DOM元素,則會發生原始問題。所以移動圍繞DOM的腳本標記似乎是原因 - 無論移動何時發生(甚至是後加載)。

我想知道這裏發生了什麼事情,導致框架接管頁面,並找到比刪除動態創建的腳本標記更好的解決方案。

我把一個測試在這裏:http://solidgone.com/jquery/google-gadget.html - 演示使用jQuery的,但我不認爲這是關係到jQuery的...

回答

16

每當你追加一個腳本元素插入到頁面中,使用jQuery,它會嘗試執行它。因此,當你移動ig_reset(這只是一個表 - 沒有腳本),它沒有問題。當您嘗試移動包含腳本的包裝器時,腳本將被移動並重新執行。

我們正在努力解決jQuery核心中的這個重新執行問題,但暫時就是這裏發生的事情。

+1

主人!也許你可以回答[這個理論問題](http://stackoverflow.com/q/10753306/601179)關於你的真棒jQuery庫? – gdoron 2012-05-25 11:46:31

5

正如John Resig所說,這個的一個jQuery問題。您可以通過替換您的處理程序進行驗證

$("#with-wrapper").click(function() 
{ 
    $('.sidebar-content-wrapper').contents().appendTo($("#sidebar")); 
}); 

與一個避免使用jQuery方法實際移動的每個元素:

$("#with-wrapper").click(function() 
{ 
    var sidebar = $("#sidebar")[0]; 
    $('.sidebar-content-wrapper').contents().each(function() 
    { 
     // raw DOM method rather than jQuery's 
     // appendTo() -> domManip() -> execute script blocks behavior 
     sidebar.appendChild(this); 
    }); 
}); 
+0

感謝您的補充見解。 – DaveG 2008-11-26 03:15:13