web-dev-qa-db-ja.com

追加された要素内のjQuery追加

私は動作する次のjQueryコードを持っていますが、追加したいものを指定する必要なしに、追加されているものに対して追加アクションを実行できるかどうかを考えさせられました。 append().append()はトリックを実行しませんでした。最初のappend()アクションの子ではなく、2つの要素を隣り合わせに配置するだけです。

作品:

var container = $('#container'),
    child = 'child';

$('#container').append($('<div/>',{
    'id'    : 'child'
}));

$('#' + child).append($('<a/>', {
    'class' : 'close',
    'href'  : 'javascript:;',
    html    : 'close',
    click   : function(e){
        e.preventDefault();
        $('#' + child).remove();
    }
}));

動作しません:

var container = $('#container'),
    child = 'child';

$('#container').append($('<div/>',{
    'id'    : 'child'
})).append($('<a/>', {
    'class' : 'close',
    'href'  : 'javascript:;',
    html    : 'close',
    click   : function(e){
        e.preventDefault();
        $('#' + child).remove();
    }
}));

http://jsfiddle.net/Y8TwW/1/

18
user888750

.appendTo() を使用して、最初の_<div>_をIDコンテナーを持つ要素に追加し、その新しい要素への参照を取得してから、.append()

_$('<div/>',{
    'id'    : 'child'
}).appendTo('#container').append(
    $('<a/>', {
        'class' : 'close',
        'href'  : 'javascript:;',
        html    : 'close',
        click   : function(e){
            e.preventDefault();
            $('#' + child).remove();
        }
    })
);
_
20
Anthony Grist

appendは追加されたコンテンツへの参照を返さないためです。同じオブジェクト、つまり最初の追加の後、または実行する追加の数に関係なく、containerを参照しています。したがって、他の提案されているようにappendtoを使用するか、失敗した理由をよりよく示す以下を使用できます。

    var container = $('#container'),
    child = 'child';

    $('#container').append($('<div/>',{
        'id'    : 'child'
         })).find('#' + child).append($('<a/>', {
        'class' : 'close',
        'href'  : 'javascript:;',
         html    : 'close',
         click   : function(e){
            e.preventDefault();
            $('#' + child).remove();
         }
    }));​

フィドル http://jsfiddle.net/Y8TwW/3/

2
Ehtesham

追加を使用してから追加します http://jsfiddle.net/Y8TwW/2/

var container = $('#container'),
    child = 'child';
$('<div/>', { 'id': child }
 ).appendTo(container
 ).append($('<a/>', {
    'class' : 'close',
    'href'  : 'javascript:;',
    html    : 'close',
    click   : function(e){
        e.preventDefault();
        $('#' + child).remove();
    }
}));
1
ingo