1

私の質問は、要素を切り離して追加し直した後、3番目のdivのクリックイベントがトリガーされなくなったのはなぜですか?イベントは保存されません。

var test = (function($, undef) {
    var t = {};
    t.test = function(){
        var container = $('<div/>').appendTo('body');           
        $('<div/>', {
            'class' :   'some',
            'text'  :   'text'
        }).appendTo(container);         
        $('<div/>', {
            'class' :   'some',
            'text'  :   'text'
        }).appendTo(container);         
        $('<div/>', {
            'class' :   'some',
            'text'  :   'text',
            'click' :   function(){
                console.log("ahoy");
            }
        }).appendTo(container);         
        $('<div/>', {
            'class' :   'some',
            'text'  :   'text'
        }).appendTo(container);         
        var content = container.html();
        var detachedContent = $(content).detach();
        container.empty();          
        //setTimeout(function(){
            container.append(detachedContent);
        //}, 2000);         
    };      
    return t;
})(jQuery); 
test.test();

例: http: //jsfiddle.net/sCJfc/

4

2 に答える 2

2

detach()はここで責任を負いません。

コンテナ要素の内部マークアップのコピーを実行し、そのコピーから作成された要素を切り離します。これらの要素は、そもそもDOMの一部ではなく、実際にはハンドラーが登録されていません。

書いてみてください:

var detachedContent = container.children().detach();

それ以外の:

var content = container.html();
var detachedContent = $(content).detach();
于 2013-03-05T10:01:16.657 に答える
0

子要素のクローンを作成し、それらを削除してから、クローンを使用して追加し直してみてください。

var detachedContent = $(container).children().clone(true);
console.log(detachedContent);
container.empty();

container.append(detachedContent);

実例:http: //jsfiddle.net/sCJfc/2/

于 2013-03-05T10:01:04.520 に答える