{"id":32655,"date":"2025-05-13T23:33:18","date_gmt":"2025-05-14T02:33:18","guid":{"rendered":"https:\/\/mastertrend.info\/?p=32655"},"modified":"2026-04-28T14:50:55","modified_gmt":"2026-04-28T17:50:55","slug":"crie-seu-primeiro-aplicativo-web","status":"publish","type":"post","link":"https:\/\/mastertrend.info\/pt\/crea-tu-primera-app-web\/","title":{"rendered":"Crie seu primeiro aplicativo web e domine a programa\u00e7\u00e3o sem estresse \ud83d\ude80\ud83d\udcbb"},"content":{"rendered":"<h2 class=\"table-content-link\">Crie seu primeiro aplicativo web: notas + contador f\u00e1cil e r\u00e1pido \ud83d\udcdd\u26a1<\/h2>\n<p>Come\u00e7ar a programar pode parecer assustador, com tantas linguagens, estruturas e metodologias a serem consideradas. \u00c0s vezes pode parecer mais f\u00e1cil delegar tudo a uma IA. N\u00e3o se preocupe! Programar para a web pode ser simples, divertido e, o melhor de tudo, totalmente gratuito! \ud83c\udf10\u2728<\/p>\n<h2 id=\"what-you-rsquo-ll-build\">O que voc\u00ea vai construir<\/h2>\n<p>Seguindo este tutorial, voc\u00ea criar\u00e1 um aplicativo web simples para armazenar notas de texto e contar caracteres e palavras.<\/p>\n<p>O aplicativo manter\u00e1 os dados para lembrar do texto quando voc\u00ea recarregar ou reabrir a p\u00e1gina. Isso significa que voc\u00ea ter\u00e1 uma maneira conveniente de salvar qualquer texto que queira consultar mais tarde, como endere\u00e7os, URLs, etc. \ud83d\udcc4\ud83d\udd17<\/p>\n<figure><picture><source media=\"(min-width: 1024px)\" data-=\"\" \/><source media=\"(min-width: 768px)\" data-=\"\" \/><source media=\"(min-width: 481px)\" data-=\"\" \/><source media=\"(min-width: 0px)\" data-=\"\" \/><img decoding=\"async\" style=\"display: block; height: auto; max-width: 100%;\" src=\"https:\/\/mastertrend.info\/wp-content\/uploads\/2025\/01\/Crea-Tu-Primera-Aplicacion-Web-Una-App-de-Notas-Sencilla.png\" alt=\"Um exemplo de um aplicativo web simples baseado em texto que exibe notas, incluindo uma entrada de calend\u00e1rio e uma lista de URLs.\" width=\"960\" height=\"569\" title=\"\"> <\/picture><\/figure>\n<p>Ele tamb\u00e9m conta caracteres e palavras, o que \u00e9 uma boa introdu\u00e7\u00e3o ao tratamento de strings (texto). Claro, o aplicativo \u00e9 muito simples: esse \u00e9 o prop\u00f3sito! Mas com este tutorial, voc\u00ea aprender\u00e1 os conceitos b\u00e1sicos do desenvolvimento de um aplicativo web e, ent\u00e3o, o mundo ser\u00e1 seu. \ud83e\uddaa\ud83d\udcbb<\/p>\n<h2 id=\"how-you-rsquo-ll-build-it\">Como voc\u00ea vai construir isso?<\/h2>\n<p>Embora os aplicativos da web sejam muito diversos, eles normalmente envolvem tr\u00eas tecnologias principais: HTML, CSS e JavaScript. \u00c9 essencial que voc\u00ea entenda o papel deles antes de come\u00e7ar. \ud83d\udcda<\/p>\n<ul>\n<li>HTML: Hypertext Markup Language permite que voc\u00ea defina a estrutura do seu conte\u00fado. Com ele, voc\u00ea pode marcar um texto de acordo com seu significado, indicando se \u00e9 um par\u00e1grafo, um t\u00edtulo ou um item de uma lista, por exemplo.<\/li>\n<li>CSS: Folhas de Estilo em Cascata permitem que voc\u00ea estilize seu conte\u00fado. Usando essa linguagem, voc\u00ea pode colorir um par\u00e1grafo de verde, deixar todos os seus links em negrito ou posicionar uma barra lateral ao lado do seu artigo principal. \ud83c\udfa8<\/li>\n<li>JavaScript: Com esta linguagem de programa\u00e7\u00e3o, voc\u00ea pode adicionar funcionalidades ao seu site. Voc\u00ea pode fazer com que bot\u00f5es mostrem ou ocultem partes do seu documento quando clicados, ou implementar um processador de texto ou videogame completo. \ud83c\udfae<\/li>\n<\/ul>\n<p>Ele <a href=\"https:\/\/web.dev\" target=\"_blank\" rel=\"noopener noreferrer\">site.dev<\/a> (escrito por miembros del equipo de Chrome) y MDN, la Red de Desarrolladores de Mozilla, son dos excelentes fuentes de informaci\u00f3n sobre tecnolog\u00edas web fundamentales.<\/p>\n<figure><picture><source media=\"(min-width: 1024px)\" data-=\"\" \/><source media=\"(min-width: 768px)\" data-=\"\" \/><source media=\"(min-width: 481px)\" data-=\"\" \/><source media=\"(min-width: 0px)\" data-=\"\" \/><img decoding=\"async\" style=\"display: block; height: auto; max-width: 100%;\" src=\"https:\/\/mastertrend.info\/wp-content\/uploads\/2025\/01\/1736598858_798_Crea-Tu-Primera-Aplicacion-Web-Una-App-de-Notas-Sencilla.png\" alt=\"A p\u00e1gina inicial do site web.dev com recursos de aprendizagem para HTML, CSS e JavaScript.\" width=\"1388\" height=\"734\" title=\"\"> <\/picture><\/figure>\n<h2 id=\"the-app-structure\">A estrutura do aplicativo<\/h2>\n<p>O aplicativo que voc\u00ea criar\u00e1 consistir\u00e1 em tr\u00eas arquivos simples: index.html, styles.css e script.js. \ud83d\uddc2\ufe0f<\/p>\n<p>N\u00e3o h\u00e1 requisitos especiais para executar o aplicativo, voc\u00ea s\u00f3 precisa de um navegador da web. N\u00e3o h\u00e1 funcionalidade de backend, ent\u00e3o voc\u00ea n\u00e3o precisa de uma linguagem de script como PHP ou de um servidor web local. Quando terminar, voc\u00ea pode abrir o <a title=\"Como configurar um servidor web Linux local no Windows 11\" href=\"https:\/\/mastertrend.info\/pt\/servidor-web-linux-local\/\" target=\"_blank\" rel=\"noopener\" data-wpil-monitor-id=\"5749\">arquivo index.html diretamente no seu navegador<\/a> e tudo dar\u00e1 certo. \ud83d\ude0a<\/p>\n<p>\u00c9 importante observar que este aplicativo salva seu texto sem grav\u00e1-lo em um arquivo espec\u00edfico no disco, j\u00e1 que o JavaScript n\u00e3o consegue acessar o sistema de arquivos. Utiliza a Web Storage API, uma alternativa poderosa aos cookies. \ud83c\udf6a\ud83d\udcbe<\/p>\n<h2 id=\"how-to-build-the-note-taker\">Como construir o anotador<\/h2>\n<p>Crie os tr\u00eas arquivos a seguir no mesmo diret\u00f3rio e abra index.html em um navegador da web. Alternativamente, voc\u00ea pode baixar os arquivos de <a href=\"https:\/\/github.com\/bobbykjack\/text\" target=\"_blank\" rel=\"noopener\">este reposit\u00f3rio GitHub<\/a>. \ud83d\udce5<\/p>\n<h3 id=\"building-the-structure-with-html\">Construindo a estrutura com HTML<\/h3>\n<p>O arquivo index.html define a estrutura do conte\u00fado do seu aplicativo em HTML. Inclua refer\u00eancias aos outros dois arquivos para que um navegador possa combin\u00e1-los para o produto final.<\/p>\n<p>Como todos os documentos HTML, a estrutura de n\u00edvel superior inclui uma se\u00e7\u00e3o de cabe\u00e7alho contendo metadados e uma se\u00e7\u00e3o de corpo contendo o conte\u00fado real que aparecer\u00e1 na p\u00e1gina:<\/p>\n<pre><code class=\"hljs html\"><span class=\"hljs-meta\">HTML<\/span>&gt;\r\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">HTML<\/span>&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cabe\u00e7a<\/span>&gt;<\/span>\r\n    ...\r\n<span class=\"hljs-tag\"><span class=\"hljs-name\">cabe\u00e7a<\/span>&gt;<\/span><\/code><\/pre>\n<p><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">corpo<\/span>&gt;<\/span><br \/>\n&#8230;<br \/>\n<span class=\"hljs-tag\"><span class=\"hljs-name\">corpo<\/span>&gt;<\/span><br \/>\n<span class=\"hljs-tag\"><span class=\"hljs-name\">HTML<\/span>&gt;<\/span><\/p>\n<pre><code class=\"hljs html\"><\/code><\/pre>\n<pre><code class=\"hljs html\"><\/code><\/pre>\n<p>Os metadados no cabe\u00e7alho s\u00e3o muito breves, com apenas um t\u00edtulo de p\u00e1gina (que aparece na barra de t\u00edtulo do seu navegador) e uma refer\u00eancia ao arquivo styles.css:<\/p>\n<pre><code class=\"hljs html\">    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">t\u00edtulo<\/span>&gt;<\/span>Texto<span class=\"hljs-tag\"><span class=\"hljs-name\">t\u00edtulo<\/span>&gt;<\/span>\r\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">link<\/span> <span class=\"hljs-attr\">rel<\/span>=<span class=\"hljs-string\">&quot;folha de estilo&quot;<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">&quot;estilos.css&quot;<\/span> \/&gt;<\/span>\r\n<\/code><\/pre>\n<p>O corpo \u00e9 mais complicado, mas existem apenas algumas partes importantes:<\/p>\n<pre><code class=\"hljs html\">    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">divis\u00e3o<\/span> <span class=\"hljs-attr\">eu ia<\/span>=<span class=\"hljs-string\">&quot;contador&quot;<\/span>&gt;<\/span>\r\n        palavras: <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">extens\u00e3o<\/span> <span class=\"hljs-attr\">eu ia<\/span>=<span class=\"hljs-string\">&quot;palavras&quot;<\/span>&gt;<\/span>0<span class=\"hljs-tag\"><span class=\"hljs-name\">extens\u00e3o<\/span>&gt;<\/span>\r\n        \/ caracteres: <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">extens\u00e3o<\/span> <span class=\"hljs-attr\">eu ia<\/span>=<span class=\"hljs-string\">&quot;caracteres&quot;<\/span>&gt;<\/span>0<span class=\"hljs-tag\"><span class=\"hljs-name\">extens\u00e3o<\/span>&gt;<\/span>\r\n    <span class=\"hljs-tag\"><span class=\"hljs-name\">divis\u00e3o<\/span>&gt;<\/span><\/code><\/pre>\n<p><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">\u00e1rea de texto<\/span> <span class=\"hljs-attr\">eu ia<\/span>=<span class=\"hljs-string\">&quot;texto&quot;<\/span> <span class=\"hljs-attr\">foco autom\u00e1tico<\/span>=<span class=\"hljs-string\">\u00ab1\u00bb<\/span>&gt;<\/span><span class=\"hljs-tag\"><span class=\"hljs-name\">\u00e1rea de texto<\/span>&gt;<\/span><\/p>\n<pre><code class=\"hljs html\"><\/code><\/pre>\n<p><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">roteiro<\/span> <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\u00abscript.js\u00bb<\/span>&gt;<\/span><span class=\"hljs-tag\"><span class=\"hljs-name\">roteiro<\/span>&gt;<\/span><\/p>\n<pre><code class=\"hljs html\"><\/code><\/pre>\n<pre><code class=\"hljs html\"><\/code><\/pre>\n<p>O elemento div cont\u00e9m a contagem de palavras e caracteres do aplicativo. Ele estar\u00e1 localizado na parte superior do aplicativo web e ser\u00e1 atualizado sempre que o texto for alterado.<\/p>\n<p>Observe os atributos id, que s\u00e3o vitais para a opera\u00e7\u00e3o. O valor de um id deve ser \u00fanico, para que o aplicativo possa us\u00e1-lo para identificar um item espec\u00edfico. Fazer isso pode nos ajudar a estilizar esses elementos e tamb\u00e9m direcion\u00e1-los ao adicionar funcionalidades.<\/p>\n<p>A textarea \u00e9 um elemento de formul\u00e1rio integrado que permite digitar texto simples em um navegador. Com o atributo de foco autom\u00e1tico, voc\u00ea estar\u00e1 pronto para escrever assim que a p\u00e1gina carregar. Por fim, a p\u00e1gina faz refer\u00eancia ao arquivo javascript, script.js.<\/p>\n<p>Neste ponto, voc\u00ea pode abrir o arquivo index.html em um navegador. Ele n\u00e3o far\u00e1 nada agora e nem ficar\u00e1 bonito, mas \u00e9 \u00fatil testar seu aplicativo em cada est\u00e1gio para garantir que o b\u00e1sico funcione conforme o esperado.<\/p>\n<figure><picture><source media=\"(min-width: 1024px)\" data-=\"\" \/><source media=\"(min-width: 768px)\" data-=\"\" \/><source media=\"(min-width: 481px)\" data-=\"\" \/><source media=\"(min-width: 0px)\" data-=\"\" \/><img decoding=\"async\" style=\"display: block; height: auto; max-width: 100%;\" src=\"https:\/\/mastertrend.info\/wp-content\/uploads\/2025\/01\/1736598858_678_Crea-Tu-Primera-Aplicacion-Web-Una-App-de-Notas-Sencilla.png\" alt=\"Uma vis\u00e3o do aplicativo web de anota\u00e7\u00f5es com estilos de navegador padr\u00e3o, mostrando tudo agrupado no canto superior esquerdo.\" width=\"960\" height=\"569\" title=\"\"> <\/picture><\/figure>\n<h3 id=\"making-things-look-good-with-css\">Deixando-os bonitos com CSS<\/h3>\n<p>O CSS permite que voc\u00ea estilize partes da sua p\u00e1gina da web direcionando essas partes e especificando valores para propriedades como font-size e background-color. Este aplicativo de exemplo n\u00e3o precisa de um design muito refinado porque sua interface \u00e9 muito b\u00e1sica. No entanto, podemos suavizar as arestas com um toque de estilo. \ud83c\udfa8\u2728<\/p>\n<p>Primeiro, estilize o corpo para definir o design geral:<\/p>\n<pre><code class=\"hljs css\"><span class=\"hljs-selector-tag\">corpo<\/span> {\r\n    <span class=\"hljs-selector-tag\">margem<\/span>: 0;\r\n    <span class=\"hljs-selector-tag\">preenchimento<\/span>: 0;\r\n    <span class=\"hljs-selector-tag\">mostrar<\/span>: <span class=\"hljs-selector-tag\">grade<\/span>;\r\n    <span class=\"hljs-selector-tag\">altura m\u00ednima<\/span>: 100<span class=\"hljs-selector-tag\">vh<\/span>;\r\n    <span class=\"hljs-selector-tag\">linhas de modelo de grade<\/span>: <span class=\"hljs-selector-tag\">conte\u00fado m\u00ednimo<\/span> 1<span class=\"hljs-selector-tag\">fr<\/span>;\r\n}\r\n<\/code><\/pre>\n<p>Este CSS utiliza la disposici\u00f3n en cuadr\u00edcula para posicionar los conteos de palabras y caracteres en una fila estrecha sobre el textarea. La propiedad grid-template-rows especifica que la fila del conteo debe ser lo m\u00e1s corta posible (min-content) y el textarea debe llenar el espacio restante (1fr).<\/p>\n<p>A linha do contador tem um estilo b\u00e1sico para diferenci\u00e1-la do restante do texto, principalmente pelo seu fundo:<\/p>\n<pre><code class=\"hljs css\"><span class=\"hljs-selector-id\">Contador #<\/span> {\r\n    <span class=\"hljs-selector-tag\">fam\u00edlia de fontes<\/span>: <span class=\"hljs-selector-tag\">sem serifa<\/span>;\r\n    <span class=\"hljs-selector-tag\">cor de fundo<\/span>: <span class=\"hljs-selector-id\">#f7f7f7<\/span>;\r\n    <span class=\"hljs-selector-tag\">alinhamento de texto<\/span>: <span class=\"hljs-selector-tag\">centro<\/span>;\r\n    <span class=\"hljs-selector-tag\">largura<\/span>: 100%;\r\n    <span class=\"hljs-selector-tag\">preenchimento<\/span>: 0<span class=\"hljs-selector-class\">.5em<\/span> 0;\r\n}\r\n<\/code><\/pre>\n<p>Por fim, a textarea \u00e9 estilizada para exibir texto leg\u00edvel com espa\u00e7o suficiente para respirar. A linha que separa as contagens do texto \u00e9, na verdade, a borda superior desta \u00e1rea de texto.<\/p>\n<pre><code class=\"hljs css\"><span class=\"hljs-selector-tag\">\u00e1rea de texto<\/span> {\r\n    <span class=\"hljs-selector-tag\">largura<\/span>: 100%;\r\n    <span class=\"hljs-selector-tag\">altura<\/span>: 100%;\r\n    <span class=\"hljs-selector-tag\">tamanho da fonte<\/span>: 16<span class=\"hljs-selector-tag\">pt<\/span>;\r\n    <span class=\"hljs-selector-tag\">preenchimento<\/span>: 1<span class=\"hljs-selector-tag\">em<\/span>;\r\n    <span class=\"hljs-selector-tag\">dimensionamento de caixa<\/span>: <span class=\"hljs-selector-tag\">caixa de borda<\/span>;\r\n    <span class=\"hljs-selector-tag\">contorno<\/span>: 0;\r\n    <span class=\"hljs-selector-tag\">fronteira<\/span>: <span class=\"hljs-selector-tag\">nenhum<\/span>;\r\n    <span class=\"hljs-selector-tag\">topo da borda<\/span>: 1<span class=\"hljs-selector-tag\">px<\/span> <span class=\"hljs-selector-tag\">s\u00f3lido<\/span> <span class=\"hljs-selector-id\">#999<\/span>;\r\n}<\/code><\/pre>\n<figure><picture><source media=\"(min-width: 1024px)\" data-=\"\" \/><source media=\"(min-width: 768px)\" data-=\"\" \/><source media=\"(min-width: 481px)\" data-=\"\" \/><source media=\"(min-width: 0px)\" data-=\"\" \/><img decoding=\"async\" style=\"display: block; height: auto; max-width: 100%;\" src=\"https:\/\/mastertrend.info\/wp-content\/uploads\/2025\/01\/1736598859_152_Crea-Tu-Primera-Aplicacion-Web-Una-App-de-Notas-Sencilla.png\" alt=\"O aplicativo de anota\u00e7\u00f5es com estilos personalizados exibe a barra de contagem na parte superior com uma \u00e1rea de texto em tamanho real abaixo.\" width=\"960\" height=\"569\" title=\"\"> <\/picture><\/figure>\n<h3 id=\"adding-functionality-with-javascript\">Adicionando funcionalidade com JavaScript<\/h3>\n<p>Com a estrutura e o estilo definidos, voc\u00ea est\u00e1 pronto para adicionar funcionalidade: o c\u00f3digo que faz esse aplicativo simples realmente fazer alguma coisa. \ud83d\udee0\ufe0f<\/p>\n<p>Antes de come\u00e7ar a escrever at\u00e9 mesmo o c\u00f3digo mais simples, \u00e9 uma boa ideia entender o que voc\u00ea quer que ele fa\u00e7a. Neste caso, h\u00e1 apenas alguns requisitos gerais:<\/p>\n<ul>\n<li>Salve o texto inserido e recarregue-o quando necess\u00e1rio.<\/li>\n<li>Atualize a contagem de caracteres e palavras para fornecer estat\u00edsticas em tempo real. \ud83d\udcca<\/li>\n<\/ul>\n<p>Ambos os requisitos envolvem a atualiza\u00e7\u00e3o de elementos no documento. Ent\u00e3o o script come\u00e7a obtendo refer\u00eancias a esses n\u00f3s usando o m\u00e9todo getElementById:<\/p>\n<pre><code class=\"hljs js\"><span class=\"hljs-keyword\">constante<\/span> palavras = <span class=\"hljs-built_in\">documento<\/span>.obterElementoPorId(<span class=\"hljs-string\">&quot;palavras&quot;<\/span>);\r\n<span class=\"hljs-keyword\">constante<\/span> caracteres = <span class=\"hljs-built_in\">documento<\/span>.obterElementoPorId(<span class=\"hljs-string\">&quot;caracteres&quot;<\/span>);\r\n<span class=\"hljs-keyword\">constante<\/span> \u00e1rea de texto = <span class=\"hljs-built_in\">documento<\/span>.obterElementoPorId(<span class=\"hljs-string\">&quot;texto&quot;<\/span>);\r\n<\/code><\/pre>\n<p>Observe que palavras, caracteres e texto s\u00e3o os IDs de seus respectivos elementos no documento, atribu\u00eddos no arquivo HTML com o atributo id.<\/p>\n<p>Em seguida, precisamos que o aplicativo reaja quando o texto for alterado:<\/p>\n<pre><code class=\"hljs js\">textarea.addEventListener(<span class=\"hljs-string\">&quot;entrada&quot;<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun\u00e7\u00e3o<\/span>(<span class=\"hljs-params\">ev<\/span>) <\/span>{ localStorage.setItem(<span class=\"hljs-string\">&quot;texto&quot;<\/span>, ev.target.value); update_counts(ev.target.value); });\r\n<\/code><\/pre>\n<p>Um ouvinte de eventos \u00e9 uma fun\u00e7\u00e3o que o JavaScript executar\u00e1 automaticamente quando um determinado evento ocorrer. Neste caso, anexamos um ouvinte ao n\u00f3 textarea, que \u00e9 executado quando o evento &quot;input&quot; ocorre. Ou seja, quando algu\u00e9m interage com a textarea.<\/p>\n<p>Em seguida, usamos a API de armazenamento da Web para salvar o conte\u00fado atual da textarea, que vem de ev.target.value. Nessa estrutura, ev \u00e9 um objeto que representa o evento que disparou o ouvinte, ev.target \u00e9 o n\u00f3 que recebeu o evento e ev.target.value \u00e9 o texto dessa textarea.<\/p>\n<p>O m\u00e9todo setItem usa dois par\u00e2metros: um nome de chave para associar aos dados e os dados reais a serem armazenados.<\/p>\n<p>Em seguida, chamamos update_counts(), passando o mesmo texto. Explicaremos esse recurso em breve.<\/p>\n<p>Agora que estamos salvando o texto, voc\u00ea vai querer carreg\u00e1-lo novamente quando o aplicativo for aberto ou recarregado. Podemos cuidar disso usando outro ouvinte:<\/p>\n<pre><code class=\"hljs js\"><span class=\"hljs-built_in\">janela<\/span>.addEventListener(<span class=\"hljs-string\">&quot;carregar&quot;<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun\u00e7\u00e3o<\/span>(<span class=\"hljs-params\">ev<\/span>) <\/span>{\r\n    <span class=\"hljs-keyword\">var<\/span> texto = localStorage.getItem(<span class=\"hljs-string\">&quot;texto&quot;<\/span>); textarea.value = texto; update_counts(texto); });\r\n<\/code><\/pre>\n<p>Este ouvinte manipula o evento de carregamento que ocorre no objeto de janela, uma representa\u00e7\u00e3o de n\u00edvel superior da janela do navegador. Quando a janela \u00e9 carregada, uma chamada para getItem() retorna o valor de texto armazenado no armazenamento local. Este c\u00f3digo ent\u00e3o define o valor da textarea para o texto carregado e, como o listener acima, chama update_counts() com este texto.<\/p>\n<p>O trabalho restante \u00e9 feito na fun\u00e7\u00e3o update_counts() que se parece com isto:<\/p>\n<pre><code class=\"hljs js\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">fun\u00e7\u00e3o<\/span>\u00a0<span class=\"hljs-title\">contagens_de_atualiza\u00e7\u00e3o<\/span>(<span class=\"hljs-params\">texto<\/span>) <\/span>{ chars.innerHTML = texto.comprimento; palavras.innerHTML = texto.split(<span class=\"hljs-string\">' '<\/span>).comprimento; }\r\n<\/code><\/pre>\n<p>Diferentemente de uma textarea, o texto normal n\u00e3o tem uma propriedade value, ent\u00e3o definimos a propriedade innerHTML. A propriedade length de uma string \u00e9 uma propriedade simples somente leitura que nos fornece o n\u00famero de caracteres.<\/p>\n<p>text.split(&#039; &#039;) divide a string nos caracteres de espa\u00e7o, retornando o resultado como uma matriz de strings. Assim como as strings, os arrays t\u00eam uma propriedade de comprimento que nos fornece o n\u00famero de elementos em um array.<\/p>\n<p>No entanto, se voc\u00ea testar esse c\u00f3digo, poder\u00e1 notar alguns erros:<\/p>\n<ol>\n<li>Ele n\u00e3o contar\u00e1 corretamente uma palavra sozinha em uma linha, pois n\u00e3o h\u00e1 caracteres de espa\u00e7o ao redor dela.<\/li>\n<li>Sem nenhum texto, ele reportar\u00e1 uma \u00fanica palavra devido ao funcionamento da divis\u00e3o.<\/li>\n<\/ol>\n<p>Para resolver o primeiro problema, voc\u00ea pode dividir em uma express\u00e3o regular (\\s significa &quot;um caractere em branco&quot;) em vez de um espa\u00e7o. Para resolver o segundo, filtre as strings vazias do resultado:<\/p>\n<pre><code class=\"hljs js\">    palavras.innerHTML = texto.split(<span class=\"hljs-regexp\">\/\\s\/<\/span>).filtro(<span class=\"hljs-function\"><span class=\"hljs-keyword\">fun\u00e7\u00e3o<\/span>(<span class=\"hljs-params\">n<\/span>) <\/span>{ <span class=\"hljs-keyword\">retornar<\/span> n != <span class=\"hljs-string\">''<\/span>; }).comprimento;\r\n<\/code><\/pre>\n<p>Se voc\u00ea n\u00e3o entende completamente essa linha, verifique as p\u00e1ginas do MDN para <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/String\/split\" target=\"_blank\" rel=\"noopener noreferrer\">dividir<\/a> e <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Array\/filter\" target=\"_blank\" rel=\"noopener noreferrer\">filtro<\/a>.<\/p>\n<figure><picture><source media=\"(min-width: 1024px)\" data-=\"\" \/><source media=\"(min-width: 768px)\" data-=\"\" \/><source media=\"(min-width: 481px)\" data-=\"\" \/><source media=\"(min-width: 0px)\" data-=\"\" \/><img decoding=\"async\" style=\"display: block; height: auto; max-width: 100%;\" src=\"https:\/\/mastertrend.info\/wp-content\/uploads\/2025\/01\/1736598859_129_Crea-Tu-Primera-Aplicacion-Web-Una-App-de-Notas-Sencilla.png\" alt=\"O aplicativo web com texto de exemplo, mostrando contagens precisas de caracteres e palavras.\" width=\"960\" height=\"569\" title=\"\"> <\/picture><\/figure>\n<hr \/>\n<p>Voc\u00ea pode criar muitos aplicativos web \u00fateis com apenas alguns arquivos. Voc\u00ea tamb\u00e9m pode estender este aplicativo de notas simples para adicionar mais funcionalidades. Por exemplo, voc\u00ea pode usar o <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Window\/location\" target=\"_blank\" rel=\"noopener\" data-schema-attribute=\"mentions\">propriedade window.location<\/a> para recuperar a URL atual e oferecer suporte a v\u00e1rias notas variando o nome que voc\u00ea passa para localStorage.setItem. \ud83d\uddd2\ufe0f\ud83c\udf0d<\/p>","protected":false},"excerpt":{"rendered":"<p>Crie seu primeiro aplicativo web e salve notas com um contador de palavras. Aprenda de forma f\u00e1cil, r\u00e1pida e gratuita! \ud83c\udf10\ud83d\udd8b\ufe0f\u2728<\/p>","protected":false},"author":1,"featured_media":49198,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ai_generated_summary":"","iawp_total_views":39,"jnews-multi-image_gallery":[],"jnews_single_post":[],"jnews_primary_category":[],"jnews_social_meta":[],"jnews_review":[],"enable_review":"","type":"","name":"","summary":"","brand":"","sku":"","good":[],"bad":[],"score_override":"","override_value":"","rating":[],"price":[],"jnews_override_counter":[],"footnotes":""},"categories":[1435],"tags":[1445,1558],"class_list":["post-32655","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriales","tag-evergreencontent","tag-techtips"],"_links":{"self":[{"href":"https:\/\/mastertrend.info\/pt\/wp-json\/wp\/v2\/posts\/32655","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mastertrend.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mastertrend.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mastertrend.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mastertrend.info\/pt\/wp-json\/wp\/v2\/comments?post=32655"}],"version-history":[{"count":0,"href":"https:\/\/mastertrend.info\/pt\/wp-json\/wp\/v2\/posts\/32655\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mastertrend.info\/pt\/wp-json\/wp\/v2\/media\/49198"}],"wp:attachment":[{"href":"https:\/\/mastertrend.info\/pt\/wp-json\/wp\/v2\/media?parent=32655"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mastertrend.info\/pt\/wp-json\/wp\/v2\/categories?post=32655"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mastertrend.info\/pt\/wp-json\/wp\/v2\/tags?post=32655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}