0:00:00.921,0:00:07.003 Até agora, nós modificamos um monte[br]de elementos existentes na página. 0:00:07.003,0:00:10.259 Mas e se quiséssemos adicionar[br]novos elementos na página? 0:00:10.259,0:00:14.995 Poderíamos fazer isso com 'innerHTML',[br]escrevendo o HTML para as tags 0:00:14.995,0:00:19.066 dentro da cadeia de caracteres que[br]passamos, como fizemos aqui. 0:00:19.066,0:00:22.258 Isso pode ficar um pouco bagunçado,[br]especialmente se você quer criar 0:00:22.258,0:00:25.540 múltiplas tags com diferentes[br]atributos, estilos e classes. 0:00:25.900,0:00:31.097 Então, em vez disso, podemos usar um[br]conjunto inteiro de métodos de documento 0:00:31.097,0:00:35.393 para criar novos elementos do zero[br]e adicioná-los na página. 0:00:36.273,0:00:40.885 Vamos dizer que queremos adicionar[br]uma imagem de um gato na página 0:00:40.885,0:00:44.018 porque nós não achamos[br]que tem o suficiente ainda. 0:00:44.018,0:00:48.620 O primeiro passo é criar esse[br]novo elemento '< img >' , certo? 0:00:48.620,0:00:50.786 Nós queremos criá-lo. 0:00:50.786,0:00:55.980 Então vamos começar criando[br]uma variável para guardá-lo, catEl 0:00:55.980,0:01:00.935 E então vamos usar[br]document.createElement 0:01:00.935,0:01:06.615 e passar o nome da tag[br]que estamos criando, img. 0:01:06.615,0:01:11.965 Então agora você pode imaginar que[br]o navegador fez uma tag de imagem, assim. 0:01:11.965,0:01:15.069 E está flutuando no espaço em algum lugar. 0:01:15.649,0:01:19.111 Próximo passo é atribuir uma fonte a ele. 0:01:19.111,0:01:23.308 Então, catEl.src é igual a... 0:01:23.308,0:01:29.376 e vamos pegar nossa fonte daqui de cima. 0:01:30.956,0:01:34.764 - deveríamos adiciona um alt para fazer[br]essa imagem mais acessível - 0:01:34.764,0:01:41.531 não andei fazendo isso, mas deveria[br]sempre ter alt tags em nossas imagens. 0:01:42.081,0:01:47.178 Então agora você pode imaginar que essa[br]tag '< image >' que nós fizemos 0:01:47.178,0:01:58.144 tem um 'src' e também tem[br]um 'alt = "Foto de um gato fofo". 0:01:58.144,0:02:04.928 Então isso é o que fizemos[br]usando JavaScript aqui. 0:02:04.928,0:02:08.983 A tag '< img >' que fizemos[br]ainda está flutuando no espaço 0:02:08.983,0:02:11.764 porque nós não dissemos[br]ao navegar onde colocá-la. 0:02:11.764,0:02:15.832 E há tantos lugares diferentes[br]em nosso DOM em que ela poderia ir. 0:02:15.832,0:02:21.342 Vamos fazer a coisa mais fácil e apenas[br]fazer ela aparecer no final da página. 0:02:21.342,0:02:26.304 Podemos fazer isso colocando ela[br]no final da tag '< body >', então dizemos: 0:02:26.304,0:02:29.860 document.body.appendChild(catEl); 0:02:29.860,0:02:31.197 Aí está ela! 0:02:31.197,0:02:32.711 É bem grande também. 0:02:32.711,0:02:35.079 Gato muito grande - assustador. 0:02:35.199,0:02:41.198 Você pode chamar 'appendChild' em[br]qualquer nó DOM existente em sua página 0:02:41.198,0:02:47.337 e isso fará o elemento passado[br]o filho final desse nó. 0:02:47.337,0:02:52.115 Isso é onde realmente ajuda[br]visualizar o DOM como uma árvore. 0:02:52.115,0:02:57.873 A tag '< body >' é um nó nessa árvore[br]e tem um monte de filhos 0:02:57.873,0:03:00.076 como '< h1 >' e '< p1 >' 0:03:00.076,0:03:04.395 e você está adicionando mais[br]um filho no final de seus filhos. 0:03:04.395,0:03:09.074 Então, na verdade, ela estaria depois[br]da tag '< script >', logo aqui. 0:03:09.074,0:03:13.320 Usando métodos DOM, você deveria em teoria[br]ser capaz de adicionar elementos 0:03:13.320,0:03:15.531 em qualquer lugar dentro da árvore DOM. 0:03:15.531,0:03:19.447 Apenas colocamos no lugar[br]mais fácil e mais óbvio. 0:03:19.707,0:03:22.016 Vamos fazer mais um exemplo. 0:03:22.016,0:03:28.283 Usamos 'innerHTL' aqui embaixo para pôr[br]a tag '< strong >' dentro de '< span >'. 0:03:28.283,0:03:31.443 Em vez disso, poderíamos[br]usar 'createElement'. 0:03:31.443,0:03:39.639 var strongEl = [br]document.createElement("strong"); 0:03:39.639,0:03:43.824 E eu escrevi errado[br]e a grafia é muito importante. 0:03:43.824,0:03:48.663 Então isso cria uma tag '< strong >'[br]vazia, flutuando no espaço. 0:03:48.663,0:03:51.879 Então, a primeira coisa que vamos[br]fazer é definir o seu texto. 0:03:51.879,0:03:56.573 strongEl.textContent = "cat"; 0:03:56.573,0:03:57.746 Certo? 0:03:58.016,0:04:01.816 Alternativamente, na verdade,[br]poderíamos fazer essa coisa onde 0:04:01.816,0:04:04.581 criamos o que é conhecido[br]como um 'textNode'. 0:04:04.581,0:04:09.324 Muitos nós DOM na árvore DOM podem[br]ter tipos especiais de nós, 'textNode's, 0:04:09.324,0:04:10.726 como seus filhos. 0:04:10.726,0:04:14.998 E esses nós não são elementos mas[br]eles ainda são nós na árvore DOM. 0:04:14.998,0:04:17.541 Nós chamamos eles de [br]"nós folhas" porque eles são 0:04:17.541,0:04:20.077 a última coisa mesmo[br]que pode ter em uma árvore. 0:04:20.077,0:04:27.536 var strongText = [br]document.createTextNode("cat"); 0:04:27.536,0:04:31.816 E vamos apenas passar o texto, "cat". 0:04:31.816,0:04:34.496 Se usarmos essa técnica, nós agora 0:04:34.496,0:04:42.169 criamos dois nós que estão flutuando[br]no espaço: uma tag '< strong >' 0:04:42.169,0:04:46.547 e então esse 'textNode',[br]que apenas diz "cat". 0:04:46.547,0:04:49.680 E nós precisamos conectá-los um ao outro. 0:04:49.680,0:04:54.910 E queremos a tag '< strong >'[br]para ser o pai de "cat". 0:04:54.910,0:05:03.152 Então o que vamos fazer é dizer[br]'strongEl.appendChild(strongText);' 0:05:03.152,0:05:12.114 Então agora nós temos a tag[br]'< strong >' com "cat" dentro, 0:05:12.114,0:05:18.582 e temos que colocá-la onde queremos[br]porque ela ainda está flutuando no espaço. 0:05:18.582,0:05:24.527 Nós estamos dentro do loop for[br]para 'nameEls', e cada 'nameEl' 0:05:24.527,0:05:27.354 está onde queremos colocar[br]a tag '< strong >'. 0:05:27.354,0:05:34.975 Então aqui,[br]'nameEls[i].appendChild(strongEl);' 0:05:34.975,0:05:42.195 E agora nós vemos duplicado[br]porque eu deixei o jeito antigo. 0:05:42.195,0:05:47.335 Ali está adicionando à tag '< span >'[br]que já tem uma tag '< strong >' nela. 0:05:47.335,0:05:52.434 Poderíamos mudar essa linha para[br]'innerHTML' é igual a uma string vazia 0:05:52.434,0:05:57.817 que vai efetivamente limpar a span[br]antes de adicionarmos a ela. 0:05:57.817,0:06:04.925 Agora como você viu, isso levou muito mais[br]linhas de código que a versão 'innerHTML'. 0:06:04.925,0:06:06.991 Então, por quê fizemos isso? 0:06:06.991,0:06:10.789 Bem, muitos desenvolvedores não gostam[br]de modificar o documento desse jeito 0:06:10.789,0:06:13.433 porque precisa de muito mais código. 0:06:13.733,0:06:16.714 A maioria dos desenvolvedores usa[br]bibliotecas, como jQuery, 0:06:16.714,0:06:21.352 para fazer modificações no DOM por eles,[br]o que provê funções que 0:06:21.352,0:06:26.873 fazem o mesmo código com muito menos[br]linhas para você como o desenvolvedor 0:06:26.873,0:06:29.810 porque você está usando as[br]funções da biblioteca no lugar. 0:06:29.810,0:06:33.496 Gosto de escrever meu código desse jeito[br]porque eu gosto de poder 0:06:33.496,0:06:38.666 ver exatamente como estou modificando[br]a árvore DOM, uma linha por vez. 0:06:38.666,0:06:43.043 E me parece mais limpo que empurrar tudo[br]dentro de uma string de innerHTML. 0:06:43.043,0:06:44.772 Mas talvez você odeie. 0:06:44.772,0:06:47.188 De qualquer forma, agora[br]você sabe que existe. 0:06:47.188,0:06:50.939 Então você pode usar se precisar[br]e você consegue entender 0:06:50.939,0:06:54.370 o que bibliotecas como jQuery estão[br]realmente fazendo por trás dos panos. 0:06:54.370,0:06:56.000 [Legendado por: Alberto Oliveira][br][Revisado por: Fernando dos Reis]