2013-03-12 3 views
1

В JQuery, я знаю, что мы можем заменить HTML объекта с помощью .html(html code here), и мы также можем использовать один из методов (append, appendTo, prepend, и т.д. .) для достижения той же цели .html(...).Два способа построения HTML - .html() и .append()

Но в чем разница между этими двумя способами?

Обновлено

Я думаю, что я должен разместить свой код, чтобы сделать мой вопрос более четко, пожалуйста, просмотрите его.

$('<a>close</a>').click(function() { 
      alert("test"); 
     }).appendTo($('.widget-head')); 

var sHtml = $('.widget-head').wrap('<p>').parent().html(); 
$(currentTmpContainer).html(resultHtml); 

(Это только фрагмент кода. Я думаю, что вы бы хорошо понимаю это. Спасибо.)
Наконец, я обнаружил, что .click не работает в моем примере. Я думаю, причина в том, что я использую .html() вместо .append(). Правильно ли это? Благодарю.

+1

Да, '.html()' не будет копировать события JQuery, если вы хотите скопировать, вы должны использовать '.clone (истина)', если вы хотите заменить, используйте 'append'. – gdoron

+0

@gdoron Спасибо, '.append' заменяет оригинальный html? –

+0

Если вы берете существующий узел и добавляете его в другое место, он будет «перемещать» его, а не клонировать его. – gdoron

ответ

2
  1. С .html переопределить содержание, в то время как с .append добавить содержимое в конец тега.
  2. html принимает только сырую строку, с append вы также можете использовать объект jQuery.

Пример:

$('#foo').html($('<input>')); //invalid! 
$('#foo').append($('<input>')); //Valid! 

С событиями:

var $input = $('<input>').click(function(){ 
    alert('foo'); 
}); 

$('#foo').append($input); 
+1

Лучше дважды проверьте свой код ... они оба недопустимы ... –

+0

Кажется, '.html()' не может присоединить событие. Но 'append' может присоединить событие заранее. Я прав ? Я не знаком с этой частью, надеюсь, вы расскажете мне больше об этом. Благодарю. –

+0

@Joe.wang - 'append()' непосредственно манипулирует DOM, а 'html()' просто меняет код HTML. –

1

Я предпочитаю использовать .html() для изменения текста элемента. Например.

$('.myElement').html('Hello, World!'); 

Какие результаты в чем-то вроде

<p class='myElement'>Hello, World!</p> 

Я использую .append(), чтобы добавить новый элемент в существующий. Например.

$('.myElement').append($('<span>Inner Element!</span>')); 

Какие результаты в

<p class='myElement'><span>Inner Element!</span></p> 

Причина я использую .append() является то, что она позволяет мне использовать JQuery, чтобы построить на новом элементе. Например.

var newElement = $('<span>Inner Element!</span>').click(function(e){ alert("Hello!"); }); 
$('.myElement').append(newElement); 
Смежные вопросы