Подтвердить что ты не робот

На append() сделать что-нибудь

Можно ли добавить какой-либо объект/обработчик, когда элемент добавлен в DOM...?

.click(),.change(),.keyup() и т.д. одинаково...

Мне нужно получить высоту элемента, как только он будет добавлен, а затем установить высоту в другой элемент

4b9b3361

Ответ 1

Вы можете переопределить метод добавления по умолчанию и заставить его запускать пользовательское событие добавления. Затем привяжите обработчик к элементу для этого события: 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>");

Ответ 2

Для этого вы можете использовать событие "DOMSubtreeModified". Но он имеет ограниченную совместимость. См.: http://www.quirksmode.org/dom/events/#t18

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

Этот обработчик событий будет работать со всеми стандартными методами модификации DOM: appendTo(), insertBefore(), insertAfter() и т.д.

Ответ 3

Принятый ответ вызовет событие в контейнере, к которому вы добавляете, что может быть не таким, каким вы хотите. Вот версия, которая будет запускать событие для добавляемого вами элемента (ов). Обратите внимание, что это все еще неправильно обрабатывает ввод функции для добавления().

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

Ответ 4

Один из способов заключается в том, что если вы делаете append самостоятельно, выполните такую ​​функцию, как:

function do_append(elem)
{
    elem.append('......');
    // get height of your element
    // set height of another element
}

или скажите, не разрешает ли этот метод вам:)