jQuery : Are events handlers removed from objects if they are removed from the DOM using html()

后端 未结 2 1360
南旧
南旧 2021-02-15 10:47

I am concerned about memory leaks in my application as I use jquery\'s html() method a lot to replace content in the the DOM. I just want to make sure that not of these

相关标签:
2条回答
  • 2021-02-15 11:04

    Yes they are.

    If you use jQuerys .html() it will take care of you. Looking into the jQuery source, this line is getting called:

    jQuery.cleanData( this[i].getElementsByTagName("*") );
    

    which effectively cleans up all data and events. This of course won't work if you're overwritting a DOMnodes innerHTML property explicitly.

    0 讨论(0)
  • 2021-02-15 11:16

    It seems using bind in jQuery, you can have more control over the events and handlers such as in this example from http://api.jquery.com/unbind/

    var myHandlers = {};    
    
    myHandlers.handler = function() {
        alert('The quick brown fox jumps over the lazy dog.');
    };
    $('#foo').bind('click', handler);
    $('#foo').unbind('click', handler);
    
    delete(myHandlers.handler);
    

    But I don't know if that is possible to control with the normal jQuery syntax of $('a').click() since all that is returned is a jQuery object and no references to the handlers or events.

    There is related discussion to this question here on stack overflow:

    javascript memory leaks

    0 讨论(0)
提交回复
热议问题