2012-12-21 30 views
2

我寫了一些代碼來生成自定義控件。代碼返回一個jQuery元素,調用者將這個jQuery元素附加到DOM。 我將自定義滾動條應用於生成器代碼中的控件,但由於元素尚未附加到DOM,所以無法應用它。當它被附加到DOM時爲jQuery元素啓動OnAppend事件

我的問題:有沒有onAppend事件或類似的東西,以便我應用自定義滾動條的時候,該元素已被添加到DOM?發電機

示例代碼:消費者

function getControl(controlParams){ 
    var $control = $('<div/>'); 
    $control.applyCustomScrollBar(); //Not appended to DOM yet, so doesnt work 
    return $control; 
} 

示例代碼:

var $control = getControl(controlParams); 
$("body").append($control); //Appending to DOM now 

想要做的事,如:

function getControl(controlParams){ 
    var $control = $('<div/>'); 
    $control.onAppend(function(){ 
     $(this).applyCustomScrollBar(); 
    }); 

    return $control; 
} 
+1

據我所知,沒有這樣的事件。有些突變事件會觸發DOM中的更改,但如果您控制了代碼,則只需創建一個自定義事件並在您每次添加元素時觸發它,因爲這樣會更容易,並且跨瀏覽器。 – adeneo

+1

DOM突變事件將是實現這一目標的一種方式,但您最好只創建自己的自定義事件,並且(假設您使用某種外部API構建此類事件)將其暴露給用戶。 – Graham

+0

@adeneo:這不會是一個選項。可能有大量的消費者。所以我不能告訴消費者隨時都會發生事件。 剛纔想到的另一個想法是修改jquery append方法來觸發此事件。但是,這看起來很亂。每次我進行更新時,我都必須更新jquery文件來獲取此事件。 – pickhunter

回答

6

要檢測元素被添加到DOM,您需要觸發自定義事件,請嘗試以下操作:

$("body").on("appened", "div", function(event){ 
    //event after append the element into DOM, do anything 
    $(this).css("background", "blue"); 
}); 

$("<div/>", { 
    id: "some-control", 
    text: 'Example Control' 
}).appendTo("body").trigger("appened");​ 

小提琴例如:http://jsfiddle.net/uudDj/1/

希望它可以幫助

+0

這個答案應該被認爲是因爲它正是我需要的 –

1

你可以做,沒有用的jQuery MutationObserver

MutationObserver爲開發人員提供了一種反應在DOM變化。它被設計爲DOM3 Events規範中定義的突變事件的替代品。

// select the target node 
var target = document.getElementById('some-id'); 

// create an observer instance 
var observer = new MutationObserver(function(mutations) { 
    mutations.forEach(function(mutation) { 
    console.log(mutation.type); 
    });  
}); 

// configuration of the observer: 
var config = { attributes: true, childList: true, characterData: true }; 

// pass in the target node, as well as the observer options 
observer.observe(target, config); 

// later, you can stop observing 
observer.disconnect(); 

來源:devdocs.io是把它從This blog post

相關問題