JQuery DOM clone(true),对于克隆对象事件触发后,处理函数中this指代克隆对象


<!doctype html>
<html ng-app>
    <head>
        <script src="./jquery.js"></script>
    </head>
    <body>
        <div id="template">hello</div>
        <script type="text/javascript">
            $("#template").click(function(){alert("hello id="+$(this).attr("id"))})

            var templateClone = $("#template").clone(true);

            templateClone.attr("id", templateClone.attr("id")+"_"+1);
            
            templateClone.appendTo("body");
        </script>
    </body>
</html>

 如上实验, 第二行文字点击, 显示第二个id。

 

具体原因是, 事件被克隆, 但是事件处理函数没有被执行, 事件处理函数在clone对象的事件处理后才执行, 其中this为,触发此函数执行的对象。

见zhangxinxu解释:

http://www.zhangxinxu.com/wordpress/2012/04/js-dom%e8%87%aa%e5%ae%9a%e4%b9%89%e4%ba%8b%e4%bb%b6/

ar $ = function(el) {
    return new _$(el);    
};
var _$ = function(el) {
    this.el = el;
};
_$.prototype = {
    constructor: this,
    addEvent: function() {
        // ...
    },
    fireEvent: function() {
        // ...
    },
    removeEvent: function() {
        // ...
    }
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM