on append()做点什么

时间:2011-08-23 20:22:53

标签: jquery

当元素附加到DOM时,是否可以添加某种事件/处理程序??

.click(),. change(),. keyup()等......

我需要在附加元素后立即获取元素的高度,然后将高度设置为另一个元素

5 个答案:

答案 0 :(得分:61)

您可以覆盖默认的追加方法,并使其触发自定义追加事件。然后将处理程序绑定到该事件的元素:http://jsfiddle.net/H8ygx/

(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>");

答案 1 :(得分:11)

为此您可以使用“DOMSubtreeModified”事件。但它的兼容性有限。请参阅:http://www.quirksmode.org/dom/events/#t18

$('#myDiv').live("DOMSubtreeModified", function() { 
    alert('something changed inside #myDiv div');
});

此事件处理程序将适用于所有标准DOM修改方法:appendTo(),insertBefore(),insertAfter()等。

答案 2 :(得分:4)

接受的答案将触发您要追加的容器上的事件,这可能不是您想要的。这是一个将在您要追加的元素上触发事件的版本。请注意,这仍然无法正确处理append()的函数输入。

(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)

答案 3 :(得分:0)

根据 Scherbius.com 的建议,您可以使用 .on("DOMSubtreeModified"),但我建议将其应用于父元素(如果您附加到它,您应该知道):

<div id="parent"></div>
<script>
$('<div id="child"></div>').appendTo("#parent");
//Heres what you asked about:
$("#parent).on("DOMSubtreeModified", function(){console.log("Do something!")})
</script>

答案 4 :(得分:-3)

一种方法是,如果你正在追求自己做一个像:

这样的功能
function do_append(elem)
{
    elem.append('......');
    // get height of your element
    // set height of another element
}

或者告诉我这种方法是否适合你:)