2013-02-20 29 views
2
var myWindow = $("<div id='msgwindow'/>").someWidget({ 
     option1: true, 
     option2: someVariableWhoseValueChanges 
    }); 

如果上面的代碼被多次執行會發生什麼? id爲#msgwindow的元素是完全覆蓋還是部分覆蓋?它是先銷燬再重新創建的?以前的情況是否有任何遺蹟?任何事件監聽器會發生什麼?jQuery動態創建帶ID的元素:如果元素已經存在會發生什麼?

+0

它應該很好看:http://chackoverflow.com/questions/14248361/jquery-draggable-what-happens-if-is-app-twice-to-an-element – 2013-02-20 13:35:21

+0

@Christophe Roussy:謝謝你爲那個鏈接。我想知道是否將前一個元素從DOM中刪除而不是擴展更好。 – Tim 2013-02-20 14:03:48

回答

1

您問題中的代碼不會將someWidget()應用於現有元素。它會創建一個新的<div>元素,並將該小部件應用於該新元素(根據小部件的不同,該元素可能會導致或不會將元素附加到頁面的<body>)。

因此,多次運行此代碼將導致多個元素被創建並可能添加到DOM。由於所有這些元素將共享相同的id屬性,這會使您的文檔無效。

1

元素不會被過度詆譭。簡而言之,具有相同ID的另一個元素將在DOM中創建。

據我所知,事件偵聽器,如$("body").on("click", "#msgWindow"只在與DOM中匹配該ID的元素的第一個實例觸發。

您不應該在文檔中真正擁有多個ID,這是不好的做法,請考慮使用類。

+0

或做一個檢查,看看該項目是否已經存在或給他們動態ID的 – mcgrailm 2013-02-20 13:45:46

+1

@ mcgrailm是的,與計數器變量或東西:) – mattytommo 2013-02-20 13:48:33

+0

我不是主張上述方法,只是想知道什麼是副作用。我想要一個'傻瓜'對象。 – Tim 2013-02-20 14:05:06