可以說我有一個叫做widget的jquery插件,可以在多個元素上使用如何防止jQuery中的一個小部件的多個inits?
$('.myClass').widget();
頁面加載後,我動態添加HTML,其中包含更多的元素,其類別爲myClass
。如果我再次運行上面的代碼,以前加載的小部件將會重新初始化。
我想出的一個解決方案是在小部件初始化後刪除類myClass
。
另一個想法是使用.data()
並存儲init標誌檢查插件是否存在。
有沒有更好的方法來做到這一點?
可以說我有一個叫做widget的jquery插件,可以在多個元素上使用如何防止jQuery中的一個小部件的多個inits?
$('.myClass').widget();
頁面加載後,我動態添加HTML,其中包含更多的元素,其類別爲myClass
。如果我再次運行上面的代碼,以前加載的小部件將會重新初始化。
我想出的一個解決方案是在小部件初始化後刪除類myClass
。
另一個想法是使用.data()
並存儲init標誌檢查插件是否存在。
有沒有更好的方法來做到這一點?
$(".myClass-init").widget().removeClass(".myClass-init")
添加一個名爲myClass-init
新類這意味着您可以繼續使用myClass
CSS樣式,並且僅僅使用一個單獨的新類的功能。
您可以使用data-
屬性,但這些屬性的選擇器較慢。這是一個問題,你是否認爲data-
屬性更語義再額外class
我想說的只是增加一個新的類時,它的初始化和使用not
選擇排除有類元素。
//Only will work once per element, no matter how many times you run it.
$('.myClass').not('.initialized').widget().addClass('initialized');
jQueryUI的Widget框架生成僞選擇,所以如果你的控件被命名爲「進myWidget」你可以用這條線來測試它是否已經被初始化:
$("#element").is(":ui-myWidget")
我個人認爲加載HTML動態地使很難將UI和後端乾淨地分開。我更喜歡動態加載數據,並在HTML頁面中保留所有UI及其邏輯(如有必要,包括HTML創建)。這往往可以解決這樣的問題。 – sje397
如果您在下面找到我的答案有幫助,請將其投票並將其標記爲答案。謝謝! –