1 00:00:00,921 --> 00:00:07,003 Até agora, nós modificamos um monte de elementos existentes na página. 2 00:00:07,003 --> 00:00:10,259 Mas e se quiséssemos adicionar novos elementos na página? 3 00:00:10,259 --> 00:00:14,995 Poderíamos fazer isso com 'innerHTML', escrevendo o HTML para as tags 4 00:00:14,995 --> 00:00:19,066 dentro da cadeia de caracteres que passamos, como fizemos aqui. 5 00:00:19,066 --> 00:00:22,258 Isso pode ficar um pouco bagunçado, especialmente se você quer criar 6 00:00:22,258 --> 00:00:25,540 múltiplas tags com diferentes atributos, estilos e classes. 7 00:00:25,900 --> 00:00:31,097 Então, em vez disso, podemos usar um conjunto inteiro de métodos de documento 8 00:00:31,097 --> 00:00:35,393 para criar novos elementos do zero e adicioná-los na página. 9 00:00:36,273 --> 00:00:40,885 Vamos dizer que queremos adicionar uma imagem de um gato na página 10 00:00:40,885 --> 00:00:44,018 porque nós não achamos que tem o suficiente ainda. 11 00:00:44,018 --> 00:00:48,620 O primeiro passo é criar esse novo elemento '< img >' , certo? 12 00:00:48,620 --> 00:00:50,786 Nós queremos criá-lo. 13 00:00:50,786 --> 00:00:55,980 Então vamos começar criando uma variável para guardá-lo, catEl 14 00:00:55,980 --> 00:01:00,935 E então vamos usar document.createElement 15 00:01:00,935 --> 00:01:06,615 e passar o nome da tag que estamos criando, img. 16 00:01:06,615 --> 00:01:11,965 Então agora você pode imaginar que o navegador fez uma tag de imagem, assim. 17 00:01:11,965 --> 00:01:15,069 E está flutuando no espaço em algum lugar. 18 00:01:15,649 --> 00:01:19,111 Próximo passo é atribuir uma fonte a ele. 19 00:01:19,111 --> 00:01:23,308 Então, catEl.src é igual a... 20 00:01:23,308 --> 00:01:29,376 e vamos pegar nossa fonte daqui de cima. 21 00:01:30,956 --> 00:01:34,764 - deveríamos adiciona um alt para fazer essa imagem mais acessível - 22 00:01:34,764 --> 00:01:41,531 não andei fazendo isso, mas deveria sempre ter alt tags em nossas imagens. 23 00:01:42,081 --> 00:01:47,178 Então agora você pode imaginar que essa tag '< image >' que nós fizemos 24 00:01:47,178 --> 00:01:58,144 tem um 'src' e também tem um 'alt = "Foto de um gato fofo". 25 00:01:58,144 --> 00:02:04,928 Então isso é o que fizemos usando JavaScript aqui. 26 00:02:04,928 --> 00:02:08,983 A tag '< img >' que fizemos ainda está flutuando no espaço 27 00:02:08,983 --> 00:02:11,764 porque nós não dissemos ao navegar onde colocá-la. 28 00:02:11,764 --> 00:02:15,832 E há tantos lugares diferentes em nosso DOM em que ela poderia ir. 29 00:02:15,832 --> 00:02:21,342 Vamos fazer a coisa mais fácil e apenas fazer ela aparecer no final da página. 30 00:02:21,342 --> 00:02:26,304 Podemos fazer isso colocando ela no final da tag '< body >', então dizemos: 31 00:02:26,304 --> 00:02:29,860 document.body.appendChild(catEl); 32 00:02:29,860 --> 00:02:31,197 Aí está ela! 33 00:02:31,197 --> 00:02:32,711 É bem grande também. 34 00:02:32,711 --> 00:02:35,079 Gato muito grande - assustador. 35 00:02:35,199 --> 00:02:41,198 Você pode chamar 'appendChild' em qualquer nó DOM existente em sua página 36 00:02:41,198 --> 00:02:47,337 e isso fará o elemento passado o filho final desse nó. 37 00:02:47,337 --> 00:02:52,115 Isso é onde realmente ajuda visualizar o DOM como uma árvore. 38 00:02:52,115 --> 00:02:57,873 A tag '< body >' é um nó nessa árvore e tem um monte de filhos 39 00:02:57,873 --> 00:03:00,076 como '< h1 >' e '< p1 >' 40 00:03:00,076 --> 00:03:04,395 e você está adicionando mais um filho no final de seus filhos. 41 00:03:04,395 --> 00:03:09,074 Então, na verdade, ela estaria depois da tag '< script >', logo aqui. 42 00:03:09,074 --> 00:03:13,320 Usando métodos DOM, você deveria em teoria ser capaz de adicionar elementos 43 00:03:13,320 --> 00:03:15,531 em qualquer lugar dentro da árvore DOM. 44 00:03:15,531 --> 00:03:19,447 Apenas colocamos no lugar mais fácil e mais óbvio. 45 00:03:19,707 --> 00:03:22,016 Vamos fazer mais um exemplo. 46 00:03:22,016 --> 00:03:28,283 Usamos 'innerHTL' aqui embaixo para pôr a tag '< strong >' dentro de '< span >'. 47 00:03:28,283 --> 00:03:31,443 Em vez disso, poderíamos usar 'createElement'. 48 00:03:31,443 --> 00:03:39,639 var strongEl = document.createElement("strong"); 49 00:03:39,639 --> 00:03:43,824 E eu escrevi errado e a grafia é muito importante. 50 00:03:43,824 --> 00:03:48,663 Então isso cria uma tag '< strong >' vazia, flutuando no espaço. 51 00:03:48,663 --> 00:03:51,879 Então, a primeira coisa que vamos fazer é definir o seu texto. 52 00:03:51,879 --> 00:03:56,573 strongEl.textContent = "cat"; 53 00:03:56,573 --> 00:03:57,746 Certo? 54 00:03:58,016 --> 00:04:01,816 Alternativamente, na verdade, poderíamos fazer essa coisa onde 55 00:04:01,816 --> 00:04:04,581 criamos o que é conhecido como um 'textNode'. 56 00:04:04,581 --> 00:04:09,324 Muitos nós DOM na árvore DOM podem ter tipos especiais de nós, 'textNode's, 57 00:04:09,324 --> 00:04:10,726 como seus filhos. 58 00:04:10,726 --> 00:04:14,998 E esses nós não são elementos mas eles ainda são nós na árvore DOM. 59 00:04:14,998 --> 00:04:17,541 Nós chamamos eles de "nós folhas" porque eles são 60 00:04:17,541 --> 00:04:20,077 a última coisa mesmo que pode ter em uma árvore. 61 00:04:20,077 --> 00:04:27,536 var strongText = document.createTextNode("cat"); 62 00:04:27,536 --> 00:04:31,816 E vamos apenas passar o texto, "cat". 63 00:04:31,816 --> 00:04:34,496 Se usarmos essa técnica, nós agora 64 00:04:34,496 --> 00:04:42,169 criamos dois nós que estão flutuando no espaço: uma tag '< strong >' 65 00:04:42,169 --> 00:04:46,547 e então esse 'textNode', que apenas diz "cat". 66 00:04:46,547 --> 00:04:49,680 E nós precisamos conectá-los um ao outro. 67 00:04:49,680 --> 00:04:54,910 E queremos a tag '< strong >' para ser o pai de "cat". 68 00:04:54,910 --> 00:05:03,152 Então o que vamos fazer é dizer 'strongEl.appendChild(strongText);' 69 00:05:03,152 --> 00:05:12,114 Então agora nós temos a tag '< strong >' com "cat" dentro, 70 00:05:12,114 --> 00:05:18,582 e temos que colocá-la onde queremos porque ela ainda está flutuando no espaço. 71 00:05:18,582 --> 00:05:24,527 Nós estamos dentro do loop for para 'nameEls', e cada 'nameEl' 72 00:05:24,527 --> 00:05:27,354 está onde queremos colocar a tag '< strong >'. 73 00:05:27,354 --> 00:05:34,975 Então aqui, 'nameEls[i].appendChild(strongEl);' 74 00:05:34,975 --> 00:05:42,195 E agora nós vemos duplicado porque eu deixei o jeito antigo. 75 00:05:42,195 --> 00:05:47,335 Ali está adicionando à tag '< span >' que já tem uma tag '< strong >' nela. 76 00:05:47,335 --> 00:05:52,434 Poderíamos mudar essa linha para 'innerHTML' é igual a uma string vazia 77 00:05:52,434 --> 00:05:57,817 que vai efetivamente limpar a span antes de adicionarmos a ela. 78 00:05:57,817 --> 00:06:04,925 Agora como você viu, isso levou muito mais linhas de código que a versão 'innerHTML'. 79 00:06:04,925 --> 00:06:06,991 Então, por quê fizemos isso? 80 00:06:06,991 --> 00:06:10,789 Bem, muitos desenvolvedores não gostam de modificar o documento desse jeito 81 00:06:10,789 --> 00:06:13,433 porque precisa de muito mais código. 82 00:06:13,733 --> 00:06:16,714 A maioria dos desenvolvedores usa bibliotecas, como jQuery, 83 00:06:16,714 --> 00:06:21,352 para fazer modificações no DOM por eles, o que provê funções que 84 00:06:21,352 --> 00:06:26,873 fazem o mesmo código com muito menos linhas para você como o desenvolvedor 85 00:06:26,873 --> 00:06:29,810 porque você está usando as funções da biblioteca no lugar. 86 00:06:29,810 --> 00:06:33,496 Gosto de escrever meu código desse jeito porque eu gosto de poder 87 00:06:33,496 --> 00:06:38,666 ver exatamente como estou modificando a árvore DOM, uma linha por vez. 88 00:06:38,666 --> 00:06:43,043 E me parece mais limpo que empurrar tudo dentro de uma string de innerHTML. 89 00:06:43,043 --> 00:06:44,772 Mas talvez você odeie. 90 00:06:44,772 --> 00:06:47,188 De qualquer forma, agora você sabe que existe. 91 00:06:47,188 --> 00:06:50,939 Então você pode usar se precisar e você consegue entender 92 00:06:50,939 --> 00:06:54,370 o que bibliotecas como jQuery estão realmente fazendo por trás dos panos. 93 00:06:54,370 --> 00:06:56,000 [Legendado por: Alberto Oliveira] [Revisado por: Fernando dos Reis]