Qual é a diferença entre replaceWith () e html () do jQuery?

145

Qual é a diferença entre as funções replaceWith () e html () do jQuery quando o HTML está sendo passado como parâmetro?

DMCS
fonte
2
isso me ajudou! Eu estava tentando alterar o texto de um rótulo dinamicamente usando jquery e esse segmento definitivamente me ajudou. Obrigado!
precisa saber

Respostas:

289

Pegue este código HTML:

<div id="mydiv">Hello World</div>

Fazendo:

$('#mydiv').html('Aloha World');

Vai resultar em:

<div id="mydiv">Aloha World</div>

Fazendo:

$('#mydiv').replaceWith('Aloha World');

Vai resultar em:

Aloha World

Então html () substitui o conteúdo do elemento, enquanto replaceWith () substitui o elemento real.

Paolo Bergantino
fonte
1
Boa explicação!
Luis Gouveia
31

replaceWith () substituirá o elemento atual, enquanto html () simplesmente substitui o conteúdo.

Observe que o replaceWith () na verdade não exclui o elemento, mas simplesmente o remove do DOM e o devolve na coleção.

Um exemplo para Peter: http://jsbin.com/ofirip/2

cgp
fonte
3
+1 muito útil para que seja anotado que replaceWith () na verdade não exclui o elemento. Eu não tinha entendido isso!
Peter Peter
2
É verdade, ainda existe. Ele não está no DOM, então você não o verá, mas ainda é um pedaço válido de HTML. Prova: jsbin.com/ofirip/2
CGP
1
Sim isso é verdade. obrigado por colocar o exemplo. Eu estava pensando em removê-lo do DOM (mais coleta de lixo) como essencialmente uma exclusão do meu ponto de vista. Mas você está tecnicamente correto. Vou remover o -1e espero que isso seja útil para todos. :)
Peter
1
Agradecimentos para a nota, replaceWith () retornando o elemento velho só me deu alguma frustração depuração :(
Dain
2
Sim, eu estou lutando contra isso há pelo menos meia hora agora, só percebi que a função retorna o elemento substituído, eu esperava que ele retornasse o novo com código como este: var $form = $target.closest('tr').replaceWith(html) Acontece que ele $formcontém o elemento antes da substituição. ssh
Pawel Krakowiak
5

Existem duas maneiras de usar as funções html () e replaceWith () Jquery.

<div id="test_id">
   <p>My Content</p>
</div>

1.) html () vs replaceWith ()

var html = $('#test_id p').html(); retornará o "Meu conteúdo"

Mas o var replaceWith = $('#test_id p').replaceWith();retornará todo o objeto DOM de <p>My Content</p>.


2.) html ('value') vs replaceWith ('value')

$('#test_id p').html('<h1>H1 content</h1>'); vai lhe dar o seguinte posto.

<div id="test_id">
  <p><h1>H1 content</h1></p>
</div>

Mas o $('#test_id p').replaceWith('<h1>H1 content</h1>');dará a você o seguinte exposto.

<div id="test_id">
      <h1>H1 content</h1>
</div>
Harsha
fonte
2

Pergunta antiga, mas isso pode ajudar alguém.

Existem algumas diferenças na maneira como essas funções operam no Internet Explorer e Chrome / Firefox SE o seu HTML não é válido.

Limpe seu HTML e eles funcionarão conforme documentado.

(Não fechar meu </center>custo me custou a noite!)

Benjamin Wootton
fonte
6
É por isso que você não deve mais usar o centro. : p
Romain Tribes
2

Também pode ser útil saber que .empty().append()também pode ser usado em vez de .html(). No benchmark mostrado abaixo, isso é mais rápido, mas apenas se você precisar chamar essa função várias vezes.

Consulte: https://jsperf.com/jquery-html-vs-empty-append-test

equivocadamente
fonte