Jquery 在append()上做点什么
当元素被附加到DOM中时,是否可以添加某种类型的事件/处理程序 .click()、.change()、.keyup()等。类似Jquery 在append()上做点什么,jquery,Jquery,当元素被附加到DOM中时,是否可以添加某种类型的事件/处理程序 .click()、.change()、.keyup()等。类似 我需要在元素被追加后立即获取元素的高度,然后将高度设置为另一个元素一种方法是,如果您自己进行追加,则生成如下函数: function do_append(elem) { elem.append('......'); // get height of your element // set height of another element }
我需要在元素被追加后立即获取元素的高度,然后将高度设置为另一个元素一种方法是,如果您自己进行追加,则生成如下函数:
function do_append(elem)
{
elem.append('......');
// get height of your element
// set height of another element
}
或者,如果此方法不能为您剪切它,请告诉我:)您可以覆盖默认的append方法并使其触发自定义append事件。然后将处理程序绑定到该事件的元素:
(函数($){
var origAppend=$.fn.append;
$.fn.append=函数(){
return origAppend.apply(这是参数).trigger(“append”);
};
})(jQuery);
$(“div”).bind(“append”,function(){alert('Hello,world!');});
$(“div”)。追加(“”);
为此,您可以使用“DOMSubtreeModified”事件。但它的兼容性有限。见:
此事件处理程序将与所有标准DOM修改方法一起使用:appendTo()、insertBefore()、insertAfter()等。接受的答案将在您要附加到的容器上触发事件,这可能不是您想要的。下面是一个版本,它将触发要附加的元素上的事件。请注意,这仍然不能正确处理append()的函数输入
(函数($)
{
var jqAppend=$.fn.append;
$.fn.append=函数()
{
//列出属于jQuery对象的参数
var appendages=$.makeArray(参数).filter(函数(参数)
{
返回参数instanceof$;
});
//调用实际函数
var returnValue=jqAppend.apply(这是参数);
//在附加的所有jQuery对象上触发“append”事件
对于(变量i=0;i
您能显示您的附加代码吗?可能重复的附加代码不会。。我需要知道当一个元素被附加到DOMYeah中时,是否可以附加一个处理程序。对不起,我用了另一种想法:)真的从来没有想过重写apend…为什么这不只是Jquery的一部分?我错过了什么?因为在添加到jquery中时,包含这一点似乎是非常值得的。@kasdega我想它不包含在内,因为如果您使用其他方法(本机JS、其他库)附加元素,则不会触发事件!MDN说,“向文档中添加DOM变异侦听器会严重降低对该文档进行进一步DOM修改的性能(使其速度降低1.5-7倍!)。此外,删除侦听器并不能扭转这种损害。”
(function($) {
var origAppend = $.fn.append;
$.fn.append = function () {
return origAppend.apply(this, arguments).trigger("append");
};
})(jQuery);
$("div").bind("append", function() { alert('Hello, world!'); });
$("div").append("<span>");
$('#myDiv').live("DOMSubtreeModified", function() {
alert('something changed inside #myDiv div');
});
(function($)
{
var jqAppend = $.fn.append;
$.fn.append = function()
{
// Make a list of arguments that are jQuery objects
var appendages = $.makeArray(arguments).filter(function(arg)
{
return arg instanceof $;
});
// Call the actual function
var returnValue = jqAppend.apply(this, arguments);
// Trigger "append" event on all jQuery objects that were appended
for (var i = 0; i < appendages.length; ++i)
{
appendages[i].trigger('append');
}
return returnValue;
};
})(jQuery)