0

如果我将图像之类的数据附加到 div,我如何触发事件函数?

我有一些将 html 附加到我的网页的 Jquery 函数。我想调用一个函数来处理这些数据

有活动吗?或者如果附加内容,我该如何做自定义代码?

谢谢

4

3 回答 3

0

你所说的叫做监控 Dom 变化

你可能想看看这里:http ://www.quirksmode.org/js/events/DOMtree.html

关于该主题还有另一个堆栈溢出问题:检测/监控 DOM 更改的最有效方法?

于 2013-05-23T15:36:58.673 回答
0

您必须覆盖默认的 jQuery 追加功能并为追加添加触发器,然后您可以将处理程序绑定到它,如下所示:

$(function() {
    var originalAppend = $.fn.append;

    // override original append
    $.fn.append = function () {
        return originalAppend.apply(this, arguments).trigger("append");
    };
});

$("#myDiv").bind("append", function() { 
    // something was appended to #myDiv
    // code here
});

$("#myDiv").append("<img />");
于 2013-05-23T15:37:45.873 回答
0

您只能通过自己创建事件处理来管理自定义事件。例如,在您的情况下,我可以假设您每次调用 appendChild DOM 函数时都想触发一些事件。以下方式可能是一种可能的解决方案(如果我们谈论纯 JavaScript,但它提供了理解该概念的正确方法):

function() {
    // of course it could be done better here to remove from array  but it's not the topic
    function removeItem( arr, item) {
        for(var i = 0, s = arr.length; i < s; i++){
            if(arr[i]==item){
                arr.splice( i, 1);
                break;
            }
        }
    };
    // our custom event object
    var MyDomEvents = {
        events = {},
        on : function( evt, handler) {
            this.events[evt] = this.events[evt] || [];
            this.events[evt].push( handler);
        },
        un : function( evt, handler) {
            if (this.events[evt]) {
                removeItem( this.events[evt], handler);
            }
        },
        fireEvent : function() {
           var evt = arguments[0], args = [];
           for (var i = 1, s = arguments.length; i < s; i++) {
               args.push( arguments[i]);
           }
           if (this.events[evt]) {
               for (var i = 0, s = this.events[evt].length; i < s; i++) {
                   if (this.events[evt][i] &&
                     this.events[evt][i].apply( this, args) == false) {
                       return ; // stop an event if it returns false
                   }
               }
           }
        }
    };

    // very dirty but maybe it's something you are looking for
    var orig = HTMLElement.prototype.appendChild;
    HTMLElement.prototype.appendChild = function( node) {
        orig.call( this, node);
        MyDomEvents.fireEvent( 'append', this, node);
    }

    // usage:
    MyDomEvents.on( 'append', function( parent, child) {
        // handle append event
    });
}();

当然,可以在 jQuery 的“append”方法上做类似的事情,或者你可以在代码中的任何地方使用自己的“append”方法来不覆盖 DOM 的原生方法(这真的不是一个好习惯,并不是所有的浏览器都可以让你做吧)。我只是展示了如何做到这一点的主要概念。

请注意,我没有测试上面的代码,我写它只是为了展示一个想法。

于 2013-05-23T16:14:01.367 回答