2014-01-11 33 views
0

我已經實現了一些使用大約500行Javascript和一些html和css的功能。我想在同一頁面上放置2個這樣的實例。這導致名稱空間衝突。在同一頁上放置2份javascript副本

我可以想到一個避免這種繁瑣的方法: *由於html元素通過Javascript編程訪問,我需要給他們不同的id。我需要2個引用這些ID的JavaScript函數版本。 *我需要javascript狀態變量的單獨版本。

是否有一個簡單的方法來做到這一點,不需要太多的代碼重複,但名稱不同?在這種意義上,有沒有辦法讓每個副本像單獨的文檔那樣工作,即在單獨的命名空間中?

感謝

回答

0

是:讓你的代碼的最外面的函數接受id(或其他選擇器),它在運行,那麼就調用它的兩倍。

例如,

function doSomethingNifty(id) { 
    // Your code doing nifty things with `id` 
} 

叫它:

doSomethingNifty("foo"); 
doSomethingNifty("bar"); 

您在doSomethingNifty收,較id參數定義,並讓他們有機會獲得相關的調用id任何功能doSomethingNifty他們涉及到。

這是一個完整的,但非常簡單的例子。偉大的事情是,這很容易擴大。該模式不會改變,你只需把更多的內部doSomethingNifty

Live Copy | Live Source

<!DOCTYPE html> 
<html> 
<head> 
<meta charset=utf-8 /> 
<title>Simple Closure Example</title> 
</head> 
<body> 
    <div id="foo">I'm foo, click me</div> 
    <div id="bar">I'm bar, click me</div> 
    <script> 
    function doSomethingNifty(id) { 
     document.getElementById(id).onclick = showMyInfo; 

     function showMyInfo() { 
     alert("id = " + id + ", text = " + this.innerHTML); 
     } 
    } 

    doSomethingNifty("foo"); 
    doSomethingNifty("bar"); 
    </script> 
</body> 
</html> 
+0

謝謝,這是非常有幫助我有一個問題如下: – user3184007

0

沒有進入太多細節你正在試圖做什麼,重構可能會有所幫助。

例如,爲什麼不先簡單地寫HTML,然後以工作所需的方式編寫JS,而不是使用鎖定的不可移植的代碼。 ?

有些事情就不能很好地擴展(例如,會發生什麼,如果你想在同一頁上4個實例

相關問題