我写了一些代码来生成自定义控件。代码返回一个jQuery元素,调用者将此jQuery元素附加到DOM。 我在生成器代码中将自定义滚动条应用于控件,但由于元素尚未附加到DOM,因此不会应用它。
我的问题:是否有任何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;
}
答案 0 :(得分: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/
希望有所帮助
答案 1 :(得分:2)
你可以在没有MutationObserver
MutationObserver
为开发人员提供了一种对DOM中的更改做出反应的方法。它被设计为DOM3事件规范中定义的Mutation事件的替代。
// 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();
获取