2012-05-10 55 views
0

將JS重新應用於動態生成內容的最佳方式是什麼?我說:「重新JS」,而不是「重新綁定事件」,因爲一個意思是「重新結合事件的JS,也改變了DOM」,我做了什麼,到目前爲止是這樣的:將JS重新應用於動態生成內容

main.js: 
function repplyDynamic(){ 
    $('.dynamic:not(.js-initialized)').each(function(){ 
     $(this).addClass('js-initialized').append('<div class="chaging_dom"></div>').click(function(){ 
      alert("Ae!"); 
     }); 
    }); 
} 


other_code.js 
$('body').append('<div id="dynamic">content</div>'); // could be a ajax call 
reapplyDynamic(); 

但我認爲這非常混亂。你們有更好的方法嗎?

+0

是的。爲什麼? :)... – lucaswxp

+0

只是好奇心(我也看過你的「Ae!」) –

+0

kkk ...我想這在這裏不是很常見,對吧?的xD – lucaswxp

回答

1

我個人有一個叫做dommods()的函數,它可以完成我需要的所有修改(工具提示,表單,自動調整大小的textareas等),並在每次對DOM進行非平凡的更改之後調用它。

換句話說,正是你在做什麼,但有不同的功能名稱。它沒有錯。

+0

是的,但我想要的東西更有組織,我並不需要指定一個元素是否已經被「初始化」帶班/數據。也許是一個插件? – lucaswxp

0

您可以使用jQuery's $().on method將事件處理程序附加到當前或未來的HTML元素。

+0

如果我只需要重新附加事件,就可以解決此問題。但我也需要更改DOM。 – lucaswxp

+0

檢查這一個:http://stackoverflow.com/questions/7692730/dom-mutation-event-in-jquery-or-vanilla-javascript - 它顯示了幾個方法來監測DOM變化與jQuery –

0
//main.js 
function applyDynamicStuff(content){ 
    return content         //return content 
     .append('<div class="chaging_dom"></div>') //with appended element 
     .click(function(){       //with click hander 
      alert("Ae!"); 
     }); 
} 

//other_code.js 
var dynamicItem = $('<div>content</div>')   //the new content 
applyDynamicStuff(dynamicItem).appendTo('body'); //apply Dynamic stuff and append to body