2012-05-02 12 views
13

Mam następujący kod jQuery, który działa, ale zastanawiałem się, czy możliwe było wykonanie operacji dołączania do tego, co było dołączane bez potrzeby określania, co chciałem dołączyć. append().append() nie załatwił sprawy, po prostu umieścił dwa elementy obok siebie, a nie dziecko z pierwszej akcji append().jQuery dołącz do dołączonego elementu

Works:

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(); 
    } 
})); 

nie działa:

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/

Odpowiedz

17

Można użyć .appendTo() dołączyć pierwszego <div> do elementu o identyfikatorze pojemnika, tak, że masz odniesienie do tego nowego elementu, a następnie użyć .append():

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

bym używają appendTo a następnie dołączyć 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

Umieścić odpowiedni kod w odpowiedzi, a nie tylko link do skrzypiec. – Gabe

2

Ponieważ append nie powróci w odniesieniu do załączonych zadowolony. Odnosi się do tego samego obiektu tj. container po pierwszym dopełnieniu lub bez względu na to, ile załączeń miałbyś wykonać. Tak jak inne sugerowane użycie, można użyć następujących, które lepiej pokazują, dlaczego zawodzisz.

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(); 
     } 
    }));​ 

Fiddle http://jsfiddle.net/Y8TwW/3/

Powiązane problemy