19

我有以下有效的 jQuery 代码,但它让我思考是否可以对正在附加的内容执行附加操作,而无需指定我想要附加的内容。append().append()没有做到这一点,它只是将两个元素放在一起,而不是第一个append()动作的子元素。

作品:

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/

4

3 回答 3

23

您可以使用.appendTo()将第一个附加<div>到具有 ID 容器的元素,以便您可以引用该新元素,然后使用.append()

$('<div/>',{
    'id'    : 'child'
}).appendTo('#container').append(
    $('<a/>', {
        'class' : 'close',
        'href'  : 'javascript:;',
        html    : 'close',
        click   : function(e){
            e.preventDefault();
            $('#' + child).remove();
        }
    })
);
于 2012-05-02T22:25:44.303 回答
2

因为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/

于 2012-05-02T22:55:37.370 回答
1

我会使用 appendto,然后附加 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();
    }
}));
于 2012-05-02T22:24:41.367 回答