Baixe o app para aproveitar ainda mais
Prévia do material em texto
Disciplina: Programação Cliente-servidor Aula 1: HTTP e HTML 5 Apresentação É impossível imaginar o mundo atual sem a existência da Internet. Redes sociais, aplicativos bancários, sites informativos, e os mais diversos serviços, são disponibilizados via protocolo HTTP para todo o mundo, derrubando fronteiras e promovendo um acesso muito democrático à informação. Nós, como desenvolvedores, devemos conhecer este protocolo e as tecnologias para criação de páginas, como HTML e CSS, que durante muito tempo apresentaram diversas inconsistências entre navegadores distintos, mas que, atualmente, sob a normatização da W3C e uso do DOM, converge para um ambiente com baixíssimo índice de incompatibilidade. Objetivos Identi�car as características gerais do HTTP; Explicar a sintaxe básica do HTML 5 e CSS; Descrever as características do Document Object Model (DOM). Protocolos Em uma rede de computadores, podemos observar diferentes tipos de informação transitando a todo o tempo, como arquivos, vídeos, páginas e e-mails. Para que estas transferências sejam possíveis, é necessário uniformizar a comunicação entre as partes envolvidas. É neste ponto que aparecem os protocolos. Um protocolo é, basicamente, um conjunto de regras para a forma de como se dará a comunicação entre dois dispositivos. Vale lembrar que o contexto atual envolve não só computadores, mas também celulares, componentes IoT, Smart TVs, entre diversos outros. Clique nos botões para ver as informações. Os primeiros protocolos que devemos ter em mente são o TCP (Transmission Control Protocol) e o IP (Internet Protocol), pois toda a grande rede da Internet se baseia na combinação destes dois, ou seja, no TCP/IP, responsáveis pela emissão e recepção de dados entre máquinas da rede. Logo acima do TCP/IP, outros protocolos serão necessários para especi�car serviços, determinando o formato dos dados a serem transmitidos. TCP/IP Exemplo Entre os diversos protocolos existentes, podemos destacar alguns: FTP – transmissão de arquivos; SMTP e POP – envio e recepção de e-mails; SSL – comunicação criptografada; HTTP – protocolo de hipertexto, ou hipermídia. Em nossos estudos, o protocolo HTTP é de particular interesse, pois será utilizado como base para a implementação de um sistema para a World Wide Web, também denominada simplesmente Web ou WWW, que trata de todo o grande conjunto de documentos de hipermídia disponíveis e interligados existentes na Internet. Protocolo HTTP As máquinas da Internet são identi�cadas por conjuntos de números que vão de 0 a 255, sendo 4 números no caso do IPV4, e seria muito difícil para o ser humano gravar endereços como 127.54.12.208 e 234.57.125.201. Logo, foi criado um sistema de identi�cação baseado em nomes, com servidores especí�cos para a tradução destes nomes para endereços numéricos, os quais são chamados de servidores DNS (Domain Name System). Com isso, quando digitamos um endereço, como www.estacio.br, este nome é traduzido para o IP da máquina, permitindo encontrar o site. Devemos considerar, portanto, um domínio como a relação entre o nome utilizado para navegação e o IP da máquina servidora que detém os recursos desejados, tais como páginas e arquivos. Todo site está hospedado em algum domínio, de forma a viabilizar seu acesso através da Internet. DNS Atenção! Aqui existe uma videoaula, acesso pelo conteúdo online Servidores HTTP Para que determinado protocolo de serviço seja suportado, é necessário que exista um programa capaz de “escutar” a rede e prover este serviço. Estes programas executam em diferentes servidores da rede para que os usuários possam acessar seus serviços através de programas denominados “clientes”, o que permite de�nir a comunicação como cliente-servidor. Como poderíamos identi�car de forma imediata o tipo de informação solicitada? A resposta é simples: através do uso de portas diferentes. Um programa servidor deve escutar uma ou mais portas de comunicação, que de�nirão o protocolo que será utilizado e, consequentemente, o tipo de dado que deverá ser transmitido, como as páginas HTML através do HTTP (porta 80), ou o fornecimento de arquivos via FTP (porta 21). Existem vários programas servidores (ou simplesmente servidores) que fornecem suporte ao HTTP, como Apache e IIS. Contudo, para o ambiente de programação Java, é utilizado o Tomcat como Web Server, podendo ser executado de forma direta, ou incorporado a outros servidores, como GlassFish, WebSphere, BEA Weblogic e JBoss, estes últimos denominados Application Servers. Web Server primeiro fornece nativamente apenas o suporte a tecnologias Web, como HTML, JSP e Servlet Application Server acrescenta suporte a tecnologias corporativas baseadas em objetos distribuídos, a exemplo dos EJBs (Enterprise Java Beans). Clientes HTPP Um cliente HTTP é tipicamente denominado “navegador”, sendo comum o seu uso no nosso dia a dia, a exemplo do Google Chrome, Opera, FireFox, Microsoft Edge, além de navegadores especí�cos dos diversos dispositivos móveis. A linguagem HTML foi adotada como padrão para a criação de páginas na Internet, e um navegador deve ser capaz de interpretar estas páginas, exibindo o conteúdo com as formatações corretas e permitindo a navegação entre as mesmas através de hiperlinks. É importante notarmos que diferentes dispositivos apresentam dimensões e recursos variados, o que pode trazer problemas quanto à exibição da informação. Fato este que acabou trazendo à tona um termo que se tornou comum no design de páginas: a responsividade. Responsividade é a capacidade de exibir a mesma informação em diferentes dispositivos, adequando o formato da exibição aos mesmos, ou seja, uma interface responsiva pode ser acessada por diferentes plataformas sem deformações que inviabilizem sua utilização. Linguagem HTML 5 1991 Foi formalizada a linguagem HTML, do inglês Hypertext Markup Language, baseada nas propostas de Tim Berners-Lee, físico britânico que visava obter um meio de divulgação de suas pesquisas entre seus colegas. 1996 Inicialmente controlada pela IETF (Internet Engineering Task Force), passou a ter suas especi�cações mantidas pela W3C (World Wide Web Consortium) a partir de 1996, sendo a recomendação HTML 4.01 publicada em 1999. 2000 A W3C passa a recomendar a sua nova especi�cação XHTML, a qual traz uma sintaxe mais rígida para o HTML, baseando-se nas regras do XML (Extended Markup Language). 2008 Finalmente, a partir da primeira publicação pela W3C, surge a especi�cação do HTML 5, o�cializada em 2014, e tendo como característica principal um novo mecanismo de extensibilidade que permite combinar diferentes sintaxes baseadas em XML dentro de uma mesma página. Como nas versões iniciais, o HTML 5 é uma linguagem de marcação baseada em etiquetas (tags) que devem controlar diversos aspectos do texto. Nas versões iniciais do HTML ocorria o controle tipográ�co e estrutural, mas no HTML 5 a preocupação é apenas estrutural, sendo delegado para o CSS (Cascade Style Sheet) o controle de características tipográ�cas. Exemplo <!DOCTYPE html> <html> <head> <title>Primeira Página</title> meta charset="UTF-8"/> </head> <body> <!-- PARTE VISUAL --> <h1>Título da Página</h1> <p> Pequena Lista: <ul> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> </ul> </p> </body> </html> Na primeira linha, podemos observar o comando <!DOCTYPE html>, que não faz parte da sintaxe HTML, mas do XML, de�nindo um domínio de utilização para tags. No caso, esta linha indica que teremos, em seguida, um documento HTML. Todo documento é iniciado com a tag <html>, que serve para delimitar o início e �nal do documento, englobando as tags , responsável por informações gerais de pré-carga, e , correspondente ao conteúdo visual da página. Diversas tags aceitam a de�nição de atributos especí�cos, como <meta charset="UTF-8"/>, e estes atributos devem ter seusvalores colocados entre aspas ou apóstrofes. Também devemos observar a possibilidade de adicionar comentários, os quais são iniciados com <!- - e �nalizados com - ->. Conjunto de tags A seção <head> aceita um pequeno conjunto de tags, sendo as principais apresentadas a seguir: Tag Utilização <title> Define o título da página, normalmente apresentado no topo da janela <meta> Permite a inclusão de informações e controle de características do documento, como o uso de UTF-8 para acentuação da língua portuguesa <link> Efetua a ligação da página com um recurso externo, como folha de estilo CSS ou biblioteca JavaScript Quanto à seção <body>, por cuidar da parte estrutural da visualização, pode conter um grande conjunto de tags, algumas delas voltadas para o formato de títulos, áreas de escrita e listas, outras para a inclusão de imagens e elementos diversos, além de comandos de navegação e formulários, entre diversas outras. Podemos observar algumas destas tags a seguir: Tag Utilização <h1> <h2> <h3> <h4> <h5> <h6> <h7> Definem elementos de texto utilizados como títulos em diferentes tamanhos de fonte, sendo <h1> para o maior e <h7> para o menor. <b> <i> <u> <em> <strong> Negrito, itálico e outros efeitos de texto. São consideradas obsoletas, sendo recomendado o uso de folhas de estilo CSS. <p> <div> Definem trechos de texto, sendo que <p> ressalta o parágrafo e <div> é muito utilizado para a criação de camadas. <ul> <ol> Iniciam a criação de listas de elementos, sendo numeradas com <ol>. <li> Define um item de lista. <hr/> Linha divisória na horizontal. <br/> Quebra de linha. “index.html” – a página inicial Quando construímos um site, estamos criando um conjunto de páginas, em que pode ocorrer a navegação entre as mesmas. Todo site tem uma página inicial, que, nos casos mais comuns, recebe o nome “index.html”. A partir da página inicial, podemos navegar para outras páginas do mesmo domínio, ou até para outros sites, acessar recursos especí�cos, como vídeo e áudio, entre outras diversas formas de ligação com elementos externos. <a href=“URL DE DESTINO”>TEXTO DO LINK</a> Os hiperlinks serão nosso ferramental básico de navegação entre páginas, sendo criados com a tag <a>, ou âncora (do inglês anchor), sempre apontando para alguma URL (Universal Resource Locator), que pode ser de�nida como uma identi�cação de algo localizado na rede, como um site, uma página, um trecho da página, ou qualquer outro elemento identi�cado de forma unívoca. Exemplo Podemos observar a criação de uma tabela simples no código a seguir: Exemplo <!DOCTYPE html> <html> <head> <title>Alguns Links</title> <meta charset="UTF-8"/> </head> <body> <h1>Alguns exemplos de links</h1> <p> <ul> <li><a href="//www.estacio.br">Site da Estacio</a></li> <li><a href="//portal.estacio.br/graduacao.aspx">Cursos de Graduação</a></li> </ul> </p> </body> </html> Tabela Outro elemento interessante do HTML padrão é a tabela. Uma tabela exibe dados organizados em termos de linhas e colunas a partir de três tags: Tag Utilização <table> Define uma tabela e suas características gerais, como espessura de borda e espaçamento entre colunas. <tr> Inicia uma linha da tabela. <td> Define uma célula na linha criada anteriormente. Exemplo Podemos observar a criação de uma tabela simples no código a seguir: <!DOCTYPE html> <html> <head> <title>Exemplo de Tabela</title> <meta charset="UTF-8"/> </head> <body> <table border="1" width="100%"> <tr><td>Código</td><td>Produto</td><td>Quantidade</td></tr> <tr><td>100478965</td><td>Mouse PanX</td><td>210</td></tr> <tr><td>100476541</td><td>Tecladoo XPTO</td><td>148</td></tr> <tr><td>100278543</td><td>TV SmartY 40lt;/td>&<td>34</td></tr> </table> </body> </html> Atenção Hoje em dia ouvimos falar bastante do padrão Tableless, erroneamente interpretado como “sem tabelas”. Na verdade, este padrão estipula que as tabelas não devem ser utilizadas para organizar visualmente o conteúdo da página, o que passou a ser feito com camadas, mas permite que elas sejam utilizadas livremente para a exposição de dados “tabulares”, como planilhas. Dica Editores de Código HTML Embora não seja imprescindível, com certeza vamos preferir utilizar um editor de texto que ressalte os comandos HTML quando estivermos criando nossas páginas. Uma sugestão gratuita e de fácil utilização é o NotePad++ <https://notepad-plus-plus.org/download/> . CSS – Cascade Style Sheet TEAgora que nossos textos já podem ser estruturados com o uso de HTML, devemos nos preocupar com a formatação de fontes e demais elementos, o que era feito antigamente através de tags, mas que atualmente é viabilizado pelo uso das folhas de estilo (CSS). https://notepad-plus-plus.org/download/ Exemplo Para criarmos classes devemos utilizar um ponto antes do nome, e aplicar às tags de interesse através do atributo class, como podemos observar a seguir: <!DOCTYPE html> <html> <head> <title>Primeira Página</title> <meta charset="UTF-8"/> <style> h1 {color: orange} body {background-color: #000032; color:yellow}</style> </head> <body> <h1>Título da Página</h1> <p> Pequena Lista: <ul> <li>Item 1</li> <li>Item 2</li> <li>Item 37</li> </ul> </p> </body> </html> É fácil entender como o CSS possibilita modi�car completamente o aspecto original de uma página. Elementos como fontes e cores, alinhamentos, �guras de fundo, entre vários outros, podem ser con�gurados, sempre seguindo a sintaxe propriedade: valor. Outro elemento a se considerar é o elemento ao qual será aplicado o estilo, também chamado de seletor, podendo ser, inicialmente, uma tag, uma classe ou um Id (identi�cador). No exemplo anterior, a tag <h1> foi formatada com a fonte de cor laranja, enquanto <body> recebe fundo de tonalidade azul (RGB=#000032) e fonte amarela. Exemplo Nós podemos observar a criação de duas camadas no exemplo: C1, a 10 pixels do topo e 10 pixels da lateral esquerda, com altura de 200 pixels e largura de 300 pixels, adotando azul claro como cor de fundo; e C2, a 50 pixels do topo e 50 pixels da lateral esquerda, com altura de 120 pixels e largura de 220 pixels, utilizando azul como cor de fundo e amarelo como cor de fonte. <!DOCTYPE html> <html> <head> <title>Exemplo de Tabela</title> <meta charset="UTF-8"/> <style> body {background-color: #000032; color:yellow} .enfoque {color:orange} </style> </head> <body> <table border="1" width="100%"> <tr><td>Código</td><td>Produto</td><td>Quantidade</td></tr> <tr><td class="enfoque">100478965</td><td>Mouse PanX</td> <td>210</td></tr> <tr><td class="enfoque">100476541</td><td>Tecladoo XPTO</td> <td<148</td></tr> <tr><td class="enfoque">100278543</td><td>TV SmartY 40</td> <td>34</td></tr> </table> </body> </html> Devemos fazer algo similar para o uso de identi�cadores (Ids), porém utilizaremos o símbolo de hash (#), e aplicaremos a elementos que devem ser unicamente identi�cados na página. Isso quer dizer que não devo ter duas tags com o mesmo Id. O uso de Ids é muito comum na construção de camadas, as quais servem como padrão para organização dos elementos de uma página, segundo o atual padrão vigente do Tableless. <!DOCTYPE html> <html> <head> <title<Exemplo de Camadas>/title> <meta charset="UTF-8"/> <style> #C1{position:absolute; top:10px; left:10px; width:300px; height:200px; background-color:lightblue} #C2{position:absolute;top:50px; left:50px; width:220px; height:120px; background-color:blue; color:yellow} </style> </head> <body> <div id="C1"<Camada 1</div> <div id="C2">Camada 2</div> </body> </html> Atenção! Aqui existe uma videoaula, acesso pelo conteúdo online Formulários Quando efetuamos o cadastro em algum site de compras pela Web, o que estamos fazendo é o preenchimento de um formulário HTML. Estas informações são enviadas para o servidor de duas formas, denominadas “métodos”: Exemplo GET Os dados são enviados através da própria URL, �cando expostos na chamada. POST Os dados são enviados em background, o que evita a exposição, mas não determina segurança, já que os pacotes podem ser capturados por ferramentas do tipo Sniffer. Para que possamos transmitir os dados com maior segurança devemos utilizar SSL (Secure Socket Layer) com um certi�cado digital de qualidade, o que fará com que os dados transitem de forma criptografada. Quando fazemos uma chamada https estamos utilizando um ambiente deste tipo. Todo formulário é iniciado com a tag <form>, que terá como principais atributos o método de envio (method) e o destino para a informação (action). Dentro do formulário, podemos incluir os componentes de entrada de dados, como: Caixas de texto; Botões de rádio; Caixas de marcação. A grande maioria de�nida através da tag <input>, cujos atributos principais são: type, referente ao tipo de componente; name, utilizado para identi�cação do dado na chegada ao lado servidor; value, para determinar o valor de envio ou o valor de preenchimento inicial. Tipos utilizados pela tag <input> Os tipos que a tag <input> pode utilizar são explicados no quadro abaixo: Tipo Utilização text Cria uma caixa de texto, podendo ter um valor inicial definido através de value. hidden Quando queremos guardar um valor para envio, mas sem ficar visível. radio Opções mutuamente exclusivas. Quando marcamos um, todos com o mesmo atributo name serão desmarcados. O que ficar marcado, ao final, enviará seu atributo value como dado para o servidor. checkbox Quando queremos a possibilidade de marcar várias opções. Todos que forem marcados enviarão seus atributos value como dados para o servidor submit Cria um botão de envio para o formulário reset Cria um botão que reinicia (limpa) o formulário Podemos observar, a seguir, um formulário simples, com o uso das tags <form> e <input>. Exemplo Podemos observar, a seguir, um exemplo de utilização de SVG em uma página HTML5. <!DOCTYPE html> <html> <head> <title>Exemplo de Formulário</title> <meta charset="UTF-8"/> <style> body {background-color:blue; color:yellow} </style> </head> <body> <form action="//servidor/app.asmx" method="get"> Nome:<input name="N1" type="text"/><br/> Contribuinte: <input type="radio" name="CONTR" value="S"/>Sim <input type="radio" name="CONTR" value="N"/>Não <br/> <input type="submit" value="Cadastrar"/> </form> </body> </html> Neste exemplo, se escrevermos o nome XPTO e selecionarmos a opção “Sim”, ao clicarmos em Cadastrar, veri�caremos a seguinte URL na barra de navegação: //servidor/app.asmx?N1=XPTO&CONTR=S Atenção O trecho ressaltado após a interrogação corresponde ao que chamamos de Query String, onde estarão os dados, no formato nome=valor, separados pelo sinal &. Caso modi�cássemos o método para “post”, a informação enviada não �caria visível para o usuário, mas vale ressaltar que estaria transitando em um pacote sem criptogra�a na rede para o caso do HTTP comum. Sintaxes Diversas no HTML 5 Uma grande evolução do HTML 5 em relação às versões anteriores é a possibilidade de utilizar outras linguagens, como SVG e VRML, em meio ao código HTML, o que permite expandir a funcionalidade do ambiente básico. <!DOCTYPE html> <html> <head> <title>Exemplo de SVG</title> <meta charset="UTF-8"/> <style> body {background-color:blue; color:yellow} </style> </head> <body> <h1>Exemplo com SVG</h1> <svg> <rect width="100" height="50" x="10" y="10" fill="lightblue" stroke="orange" stroke-width="3"/> </svg> </body> </html> DOM O Document Object Model, ou DOM, é uma API que nos permite acessar os elementos de um documento HTML ou XML, proporcionando uma visualização hierárquica do mesmo no formato de árvore, baseado na forma como as tags são aninhadas. Com o uso de DOM �cou muito mais fácil criarmos páginas compatíveis com navegadores diversos, principalmente no que se refere à integração da página HTML com o código JavaScript. Após acessar o componente da página, os valores de seus atributos podem ser consultados e modi�cados com grande facilidade e de forma padronizada para os diversos ambientes. O processo mais comum para acessar este componente é através de seu Id, com o uso do comando a seguir, que será estudado quando tratarmos da linguagem JavaScript: document.getElementById( Id ) Como as tags são organizadas hierarquicamente, a partir de um nó raiz, devemos considerar a existência de diferentes tipos de nós ao longo desta árvore, como elementos, ou tags, atributos e textos. Os principais tipos de nós são apresentados na tabela: Tipo de Nó Propriedade nodeName Propriedade nodeValue Element Nome do Elemento (ou tag) null Attr Nome do atributo Valor do atributo Text #text Conteúdo do nó CDATASection #cdata-section Conteúdo do nó Comment #comment Texto do comentário Através da de�nição estrutural do DOM e manuseio das informações fornecidas pelos nós da árvore constituída, podemos acessar, modi�car e até acrescentar elementos à página HTML, o que permite grande dinamismo e possibilidade de modi�cações parciais em um documento durante a visualização do mesmo, viabilizando um dos pilares do AJAX, tecnologia que será tratada posteriormente nesta disciplina. Atenção! Aqui existe uma videoaula, acesso pelo conteúdo online Atividade 1 - Os Web Servers são programas servidores que respondem ao HTTP, sendo que alguns deles oferecem suporte a tecnologias de objetos distribuídos e são normalmente classi�cados como Application Servers. Dentre os servidores apresentados a seguir, qual deles NÃO pode ser considerado nativamente como um Application Server? a) BEA Weblogic b) Tomcat c) WebSphere d) GlassFish e) JBoss 2 - Hoje em dia a formatação tipográ�ca das páginas não é mais feita no código HTML, que assumiu um papel estruturante com relação ao conteúdo da página, e as folhas de estilo CSS passaram a ser a tecnologia adotada para esta formatação. Qual seria o comando CSS para formatar o fundo de uma camada com id “centro” na cor amarela? a) .centro { background-color: yellow } b) #centro { color: yellow } c) *centro { background: yellow } d) #centro { background-color: yellow } e) .centro{ color:yellow } 3 - A utilização de DOM viabiliza a interpretação do conteúdo XML ou HTML no formato de árvore (hierárquico), onde cada nó da árvore apresenta diversas informações, as quais podem ser expressas em termos das propriedades nodeName e nodeValue. Para um nó do tipo Element, qual a informação fornecida por nodeValue? a) Nome do Atributo b) Conteúdo do Nó c) Valor Nulo d) Texto de Comentário e) Valor do Atributo NotasReferências CASSATI, J. P. Programação cliente em sistemas web. Rio de Janeiro: Estácio, 2016. DEITEL, P; DEITEL, H. Ajax, Rich Internet Applications e Desenvolvimento Web para Programadores. São Paulo: Pearson Education, 2009. PLOTZE, R. Tecnologias Web. Rio de Janeiro: Estácio, 2016. SANTOS, F. Tecnologias para Internet II. Rio de Janeiro: Estácio, 2017. Próxima aula Características do JavaScript; Sintaxe básica do JavaScript; Criação de funções e bibliotecas com uso de JavaScript. Explore mais RFC do protocolo HTTP <https://tools.ietf.org/html/rfc2616> Introdução aoHTML 5 <https://www.w3schools.com/html/html5_intro.asp> Tutorial de CSS <https://www.w3schools.com/css/> https://tools.ietf.org/html/rfc2616 https://www.w3schools.com/html/html5_intro.asp https://www.w3schools.com/css/ Disciplina: Programação Cliente-servidor Aula 2: JavaScript – Parte 1 Apresentação As páginas HTML foram se tornando cada vez mais complexas. Ao invés das páginas simplesmente informativas do início da Web, hoje temos páginas extremamente interativas e conceitos como RIA (Rich Internet Application). Neste sentido, acaba se tornando necessário um ferramental que traga maior �exibilidade às páginas em termos funcionais, e não apenas visuais. Veremos nesta aula que o uso da linguagem JavaScript irá nos permitir ampliar as funcionalidades básicas de nossas páginas Web, já que é uma linguagem tão bem aceita que passou a ser utilizada em outras áreas além do controle do browser, como na programação de dispositivos móveis e servidores Web. Objetivos Identi�car as características gerais e histórico do JavaScript; Explicar a sintaxe básica do JavaScript; Usar o JavaScript para a criação de funções e bibliotecas. Origens e características A linguagem JavaScript nem sempre teve este nome. Desenvolvida originalmente pela Netscape, ela se chamava Mocha, tendo o nome modi�cado posteriormente para LiveScript, quando ocorreu o lançamento da mesma junto ao navegador Netscape 2.0 versão beta, em setembro de 1995. Em dezembro de 1995, em um anúncio conjunto com a Sun Microsystems, é lançado o Netscape 2.0B3, com suporte à tecnologia de Applets, sendo o nome da linguagem modi�cado para JavaScript, o que causa muita confusão até hoje no que tange à sua relação com a linguagem Java. Atenção É importante que tenhamos em mente que JavaScript não é Java, e a similaridade entre as duas linguagens ocorre apenas pelo fato de ambas utilizarem sintaxes baseadas na linguagem C. Utilizamos o JavaScript para controle de elementos da página HTML e viabilização da interatividade da mesma, caracterizando-se originalmente como uma tecnologia cliente, podendo ser embebida na própria página, ou organizada no formato de biblioteca, como arquivo externo. Recentemente, o JavaScript passou a ser utilizado também do lado servidor, através de tecnologias como o node.js. Outro ambiente que recebeu a possibilidade de desenvolvimento com JavaScript foi o dos dispositivos móveis, com uso de ferramentas como Ionic. Sintaxe Inicialmente devemos compreender a declaração de variáveis e operações aritméticas da linguagem. Uma variável pode ser declarada com o uso de var, ou simplesmente com a inicialização da mesma. Como o JavaScript não é fortemente tipado, a variável assume o tipo do valor associado a ela. Os tipos com os quais a linguagem trabalha são: Inteiro; Ponto �utuante; Booleano; Texto; Objeto; e Vetor (como objeto da classe Array). Exemplo Operadores aritméticos utilizados no JavaScript Operador Operação + Soma (concatenação para texto) - Subtração * Multiplicação / Divisão % Resto da divisão inteira ++ Incremento de 1 -- Decremento de 1 No exemplo a seguir, são declaradas e inicializadas as variáveis a e b, sendo impressas na página algumas operações sobre as mesmas através do comando document.writeln. É interessante observar que este comando escreve sobre a página HTML, permitindo a inclusão de tags, como o uso de <br/> para quebra de linha. <html> <body> <script> var a = 10, b = 5; // Algumas operações básicas... document.writeln( "Soma: "+(a+b)); document.writeln( "Subtração: "+(a-b)); document.writeln( "Multiplicação: "+(a*b)); document.writeln ("Divisão: "+(a/b)); document.writeln( "Teste de igualdade: "+(a==b)); <</script> <</body> </html> Soma: 15 Subtração: 5 multiplicação: 50 Divisão: 2 Teste de igualdade: false Dica Lembre-se sempre de comentar seu código para que você e outros programadores possam revisá-lo com maior facilidade em adaptações posteriores. O JavaScript aceita dois tipos de comentários: Comentário de linha, com uso de //; Comentário longo, iniciado com /* e �nalizado com */. Os operadores relacionais permitem a comparação entre valores, tendo como resultado um valor verdadeiro (true) ou falso (false), o que pode ser armazenado em uma variável booleana. Podemos observá-los no quadro: Operador Operação == Compara a igualdade entre os termos != Compara a diferença entre os termos > Compara se o primeiro é maior que o segundo < Compara se o primeiro é menor que o segundo >= Compara se o valor é maior ou igual <= Compara se o valor é maior ou igual Nós também podemos combinar valores booleanos com o uso de operadores lógicos expressos pela tabela-verdade a seguir: A (Booleano 1) B (Booleano 2) A && B - AND A || B - OR !A - NOT false false false false true false false true true true true false true true false true true true true false Estruturas de decisão Estando de�nidas as variáveis e métodos de saída, o nosso próximo passo será a compreensão das estruturas de decisão existentes na sintaxe do JavaScript. O �uxo de execução sequencial indica que as diversas instruções serão executadas na ordem em que são apresentadas no código, mas existem formas de redirecionar o �uxo de execução para partes especí�cas. É comum encontrarmos situações onde efetuamos determinadas ações apenas perante determinadas condições. Para isso, em termos de algoritmos, contamos com as estruturas de decisão. Exemplo Exemplo Podemos ver, no exemplo abaixo, a aplicação da estrutura if..else. Aqui, a variável x recebe o valor digitado pelo usuário com o uso da função prompt, mas com o valor, que era originalmente texto, convertido para número com o uso de eval. Um exemplo simples pode ser observado a seguir: SE �zer sol ENTÃO irei à praia SENÃO irei ao cinema. Note que a condição de “fazer sol ou não” pode ser interpretada como um valor booleano, sendo a decisão tomada a partir desta condição. Outro tipo de decisão é a que tomamos perante um conjunto de opções, algo como: SELECIONE o dia da semana: CASO SEJA segunda-feira FAÇA: passar no escritório; CASO SEJA terça-feira OU quarta-feira FAÇA: visitar os clientes; CASO SEJA quinta-feira FAÇA: fechar relatórios; SENÃO: �car em casa. Neste exemplo, as opções de segunda-feira até quinta-feira apresentam ações especí�cas, enquanto os demais dias, que não foram explicitados, executam a ação padrão a partir do comando SENÃO. Em ambos os casos, é fácil de observar os desvios no �uxo de execução, pois diversos trechos serão executados apenas sob condições especí�cas. Estrutura if..else Na sintaxe do JavaScript, a instrução SE..ENTÃO é expressa como if( <<condição>>), podendo se referir a um único comando, ou um bloco de comandos delimitado pelo uso de chaves. O uso da instrução SENÃO (else) é opcional, e também pode ser aplicado a um ou mais comandos, segundo as mesmas regras de escrita do if. <!DOCTYPE html> <html> <body> <script> var x = eval(prompt("Entre com o valor:","")); if(x > 5) document.writeln("<h1>Valor maior que 5</h1>"); else document.writeln("<h1>Valor menor ou igual a 5</h1>"); </script> </body> </html> Exemplo O exemplo a seguir ilustra a utilização da estrutura switch..case. Aqui, a página solicitará um valor entre 1 e 3, e, de acordo com o valor utilizado, será de�nida uma cor de fundo diferente para a palavra “XPTO”, sendo assumido fundo preto para opções que não forem previstas. Estrutura switch..case Para o comando SELECIONE devemos utilizar switch( <<variável>> ) no JavaScript. Este comando irá desviar o �uxo de execução para os comandos case, de acordo com o valor da variável, sendo que o comando default será executado caso o valor não esteja entre aqueles que foram previstos. Devemos observar que cada seção case deve ser terminada com o comando break. <!DOCTYPE html> <html> <head><meta charset="UTF-8"/> </head> <body> <script> var x1 = eval(prompt("Digite um valor entre 1 e 3","")); var cor; switch(x1){ case 1: cor = "yellow"; break; case 2: cor = "lightblue"; break; case 3: cor = "lightgreen"; break; default: cor = "black"; } document.writeln("<span style='background-color:"+cor+"'>XPTO<span>"); </script> </body> </html> Estruturas de repetição Outra forma e redirecionar o �uxo de execução é através do uso de estruturas de repetição. Elas servem para repetir a execução de um comando ou bloco de comandos enquanto determinada condição for verdadeira. A primeira estrutura de repetição que iremos analisar é denominada PARA..FAÇA. Ela permite repetir um determinado bloco de comandos para cada valor assumido por uma determinada variável dentro de uma faixa pré-especi�cada. Podemos observar um exemplo simples, a seguir: PARA X DE 1 A 10 FAÇA: INÍCIO ESCREVA ( X ) FIM Neste exemplo, a variável x assumirá os valores de 1 até 10, sendo impresso o valor da mesma a cada rodada através do comando escreva. Em termos práticos serão impressos os valores de 1 a 10. O bloco de execução é especi�cado pelas palavras “INÍCIO” e “FIM”, e a presença das mesmas não seria necessária, neste caso, por envolver apenas uma instrução. Outra estrutura de repetição de grande utilização é denominada ENQUANTO..FAÇA, e ela permite repetir um bloco de comandos enquanto determinada condição for verdadeira, como no exemplo a seguir. X = 1 ENQUANTO X < 11 FAÇA INÍCIO ESCREVA ( X ) X = X + 1 FIM Teremos aqui o mesmo efeito do exemplo de PARA..FAÇA, ou seja, serão impressos os números de 1 a 10, no entanto, a forma de construir é diferente. A variável X é inicializada com o valor 1, e a estrutura ENQUANTO..FAÇA repetirá a execução do bloco enquanto esta variável tiver valor menor do que 11. Note a necessidade de incrementar o valor de X no bloco de execução, caso contrário o loop nunca acabaria. Caso o valor de X tivesse sido inicializado com qualquer valor maior do que 10, não ocorreria a execução do bloco nenhuma vez, o que diferencia a estrutura ENQUANTO..FAÇA, onde o teste é feito na entrada, da estrutura FAÇA..ENQUANTO, onde o teste é feito na saída. Reescrevendo o exemplo anterior teríamos: X = 1 FAÇA INÍCIO ESCREVA ( X ) X = X + 1 FIM ENQUANTO X < 11 Com este novo formato, se X fosse inicializado com o valor 12, por exemplo, este valor seria impresso, pois o teste é feito apenas na saída da estrutura de controle. Estruturas de controle do tipo FAÇA..ENQUANTO são interessantes quando queremos obrigar a execução do bloco pelo menos uma vez, sendo bastante utilizadas na criação de menus para interatividade, como: FAÇA INÍCIO ESCREVA ( “DESEJA CADASTRAR NOVO CLIENTE OU SAIR?” ) LEIA ( OPCAO ) SE OPCAO != “SAIR” ENTÃO INÍCIO // COMANDOS DIVERSOS FIM FIM ENQUANTO OPCAO != “SAIR” Estrutura for A implementação de estruturas do tipo PARA..FAÇA utiliza a seguinte sintaxe: Por exemplo, um loop de 1 a 5 seria escrito como for( i=1 ; i<=5 ; i++ ). No código seguinte podemos observar um loop para imprimir os números de 1 a 10, classi�cando-os como pares ou ímpares. <!DOCTYPE html> <html> <body> <ul> <script> for(i=1 ; i<=10 ; i++){ tipo = ( i%2==0 ) ? "par" : "impar"; document.writeln("<li>O numero "+i+" e "+tipo+"</li>"); } </script> </ul> </body> </html> Neste código podemos observar, também, a utilização de um operador de decisão para escolher entre “par” ou “ímpar”. Um operador de decisão segue a sintaxe abaixo: variável = ( << condição >> ) ? valor para true : valor para false Baseado nisto, podemos dizer que, se a condição ( i%2==0 ) for verdadeira, tipo recebe “par”, senão recebe “impar”. Isso equivale à seguinte estrutura de decisão: if ( i%2==0 ) tipo = "par"; else tipo = "impar"; Podemos utilizar o operador de decisão para a simpli�cação da escrita nas situações em que uma determinada variável recebe dois valores alternativos perante uma determinada condição. Estruturas while e do..while Exemplo ENQUANTO..FAÇA A implementação de estruturas do tipo ENQUANTO..FAÇA utiliza a seguinte sintaxe: while( <<condição>> ) { // Bloco de Comandos } Condição – Expressão booleana que determina a execução do comando ou bloco de comandos. FAÇA..ENQUANTO Com relação às estruturas do tipo FAÇA..ENQUANTO, a sintaxe utilizada seria: do { // Bloco de Comandos } while( <<condição>> ); Condição – Expressão booleana que determina a continuidade da execução do bloco de comandos. Exemplo Clique em Exemplo <galeria/aula2/anexo/exemplo.pdf> e observe a utilização do comando while. Funções e bibliotecas Em muitas situações, precisamos efetuar uma determinada sequência de comandos repetidas vezes em diferentes contextos. Toda vez que replicamos código estamos aumentando o tamanho do mesmo e di�cultando a manutenção. Por exemplo, se um erro é detectado nesta sequência de comandos, ocorrerá a necessidade de procurar todas as diversas ocorrências da mesma e alterar cada uma delas. Uma solução para isso é o uso de uma função, que é a denominação de um processo englobando uma sequência de comandos, e que recebe um nome e a possibilidade de parâmetros de entrada e retorno de valor. Já utilizamos algumas funções nativas do JavaScript em outros exemplos, como prompt e eval, e agora utilizaremos mais uma. A função con�rm tem por objetivo efetuar uma pergunta, retornando true para o caso do clique em OK e false para Cancela. <script> function meuProcesso(){ a = eval(prompt("Entre com o valor:","")); b = a * 5; document.writeln("<br/>"+a+" * 5 = "+b); } meuProcesso(); z = 3; while(z>0) { meuProcesso(); z--; } if(confirm("Mais uma vez?")) { meuProcesso(); } </script> Neste exemplo, um mesmo procedimento é repetido diversas vezes, apenas alterando a nomenclatura das variáveis. Se a multiplicação fosse alterada de 5 para 4, ocorreria um problema de manutenção bastante relevante, mesmo para um código pequeno como esse. A solução é transformar o processo repetitivo em uma função, como no código abaixo: http://estacio.webaula.com.br/cursos/gon964/galeria/aula2/anexo/exemplo.pdf <script> function meuProcesso(){ a = eval(prompt("Entre com o valor:","")); b = a * 5; document.writeln("<br/>"+a+" * 5 = "+b); } meuProcesso(); z = 3; while(z>0) { meuProcesso(); z--; } if(confirm("Mais uma vez?")) { meuProcesso(); } </script> Note como o código �cou mais legível com a de�nição da função. Além disso, as tarefas de manutenção são muito facilitadas, pois a alteração do corpo da função irá impactar de forma automática em todas as suas utilizações no decorrer do código. O formato geral de uma função, no JavaScript, seria: function NOME (PARÂMETRO1, PARÂMETRO2 ... PARÂMETRON) { [COMANDOS] return VALOR; } Tanto os parâmetros quanto o valor de retorno são opcionais na de�nição de uma função. Poderíamos exempli�car uma função para o cálculo da hipotenusa de um triângulo retângulo a partir do fornecimento dos valores de seus catetos, baseada no Teorema de Pitágoras. Neste exemplo, são utilizados Math.sqrt para cálculo da raiz quadrada e Math.pow para elevar um valor a uma potência, no caso ao quadrado. Como as funções visam a reutilização, é muito comum organizá-las em grupos denominados bibliotecas, normalmente guardadas em arquivos texto com a extensão “js”. Diversas bibliotecas JavaScript encontram-se disponíveis e podemos também criar as nossas. Para o próximo exemplo, utilizaremos dois arquivos, sendo um denominado “cores.js”e outro “testeCores.html”. Incialmente, vamos observar o código de “cores.js”: function pitagoras(cateto1, cateto2){ return Math.sqrt(Math.pow(cateto1,2) + Math.pow(cateto2,2)); } var letras = new Array("0","1","2","3","4","5","6","7","8","9", "A","B","C","D","E","F"); function getHexa(inteiro){ resto = inteiro % 16; quociente = (inteiro - resto) / 16; return letras[quociente] + letras[resto]; } function getCor(r,g,b){ return "#" + getHexa(r) + getHexa(g) + getHexa(b); } Esta biblioteca visa efetuar a conversão dos números inteiros entre 0 e 255 para hexadecimal, e a formação de códigos de cores no padrão RGB a partir de 3 inteiros na faixa citada. Incialmente, com o uso de Array, é de�nido um vetor de elementos texto, onde cada posição representa um número de 0 a 15 no formato hexadecimal, como cores[11] equivalendo a “B”. Em seguida, de�nimos a função getHexa, que recebe um valor inteiro como parâmetro, e efetua a conversão para hexadecimal. Esta conversão é efetuada com a divisão inteira por 16, sendo o quociente utilizado para alta ordem do hexadecimal e o resto para baixa ordem. Por exemplo, se dividirmos 222 por 16, teremos quociente 13 e resto 14, o que retornará o valor “DE” em hexadecimal. A última função se chama getCor, e recebe três parâmetros denominados r, g e b, os quais correspondem aos componentes vermelho, verde e azul da composição da cor. No corpo desta função podemos observar a concatenação do símbolo “#” com as chamadas de getHexa para os três parâmetros sucessivamente. Se efetuarmos uma chamada getCor(222,220,224) teremos como retorno o valor “#DEDCE0”. Agora que construímos nossa biblioteca para tratamento de cores, podemos utilizá-la em uma página HTML, a qual recebeu o nome de “testeCores.html”, cujo código e saída podem ser observados a seguir: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <script src="cores.js"></script> </head> <body> <script> for(i=1;i<=100;i++){ red = Math.trunc(Math.random()*255); green = Math.trunc(Math.random()*255); blue = Math.trunc(Math.random()*255); document.writeln("<span style='color:"+getCor(red,green,blue)+"'<"); document.writeln(i + "</span>"); } </script> </body> </html> No código da página, podemos observar um loop de 1 a 100, com uso de for, e internamente o uso de Math.trunc, que faz a aproximação inteira, e Math.random, para obter um número aleatório entre 0 e 1, segundo uma distribuição uniforme. Ao multiplicar o resultado de Math.random por 255, obtemos um número aleatório entre 0 e 255, porém no formato de ponto �utuante, o que é resolvido com a transformação em inteiro com Math.trunc, viabilizando a chamada de getCor. A cada rodada do loop, é escrita uma tag <span>, tendo como conteúdo o valor de i corrente, e sendo formatada a cor da fonte com uso do atributo style. Como os números para red, green e blue são randômicos, a cada vez que atualizamos a página, os números serão expostos com cores diferentes. Para as operações matemáticas fazemos grande uso de Math. Método ou Atributo Descrição sqrt(x) Cálculo da raiz quadrada de x trunc(x) Trunca o valor x, retornando apenas a parte inteira pow(x,y) Retorna o resultado de x elevado a y random( ) Retorna um valor aleatório entre 0 e 1 PI Constante com o valor de PI max(x1,x2,...,xn) Retorna o maior valor da sequência min(x1,x2,...,xn) Retorna o menor valor da sequência sin(x) Calcula o seno de um ângulo x em radianos cos(x) Calcula o cosseno de um ângulo x em radianos abs(x) Retorna o valor absoluto de x Saiba mais Os outros métodos e atributos de Math podem ser observados em w3schools.com <https://www.w3schools.com/js/js_math.asp> . Recursividade Quando falamos sobre recursividade, estamos nos referindo a funções que chamam a si mesmas, repetidamente, para a solução de determinado problema. Talvez o exemplo mais simples de recursividade seja o cálculo do fatorial de um número. Por exemplo, 4! = 4 * 3 * 2 * 1, 3! = 3 * 2 * 1, 2! = 2 * 1 e 1! = 1. Podemos observar que 4! = 4 * 3! ou que 3! = 3 * 2! e, a partir disso, de�nir uma regra de recursividade. Toda função recursiva chama a si mesma, e tem uma regra de parada para que não ocorra uma execução inde�nida. Neste caso, a regra seria “quando chegar a 1 retorne 1”. A seguir, podemos observar um exemplo de implementação da função fatorial de forma recursiva. https://www.w3schools.com/js/js_math.asp <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <script src="cores.js"></script> </head> <body> <script> function fatorial(n){ if(n>1) return n * fatorial(n-1); else return 1; } x = eval(prompt("Digite um numero","")); document.writeln("Fatorial de "+x+" = "+fatorial(x)); </script> </body> </html> Atividade 1 - Marque Verdadeiro ou Falso para as opções sobre as características gerais da linguagem JavaScript: a) A sintaxe JavaScript diferencia maiúsculas e minúsculas. b) JavaScript é fortemente tipado. c) Foi desenvolvida originalmente pela NetScape com o nome de Mocha. d) Hoje é possível desenvolver para dispositivos móveis com JavaScript. e) JavaScript foi criado como uma versão script da linguagem Java. 2 - Você começou a desenvolver a página de um novo cliente e ele solicitou que uma das páginas con�rmasse uma sequência de caracteres digitados pelo usuário de acordo com uma imagem da tela antes de apresentar o conteúdo, técnica conhecida como CAPTCHA. Considerando que o usuário terá que digitar ao menos uma vez, e repetir até acertar, qual estrutura de controle de �uxo deverá ser utilizada? a) if..else b) while c) do..while d) switch..case e) for 3 - Implemente uma função em JavaScript para efetuar o cálculo do Imposto sobre a Renda em um determinado país, considerando o desconto por faixa, de acordo com a tabela seguinte. Faixa Alíquota R$0,00 a R$1.500,00 Isento R$1.500,01 a R$2.500,00 10% R$2.501,00 a R$4.000,00 20% R$4.000,01 ou acima 30% Gabarito comentado NotasReferências CASSATI, J. P. Programação Cliente em Sistemas Web. Rio de Janeiro: Estácio, 2016. DEITEL, P; DEITEL, H. Ajax, Rich Internet Applications e Desenvolvimento Web para Programadores. São Paulo: Pearson Education, 2009. PLOTZE, R. Tecnologias Web. Rio de Janeiro: Estácio, 2016. SANTOS, F. Tecnologias para Internet II. 1. ed. Rio de Janeiro: Estácio, 2017. Próxima aula Elementos de interatividade com a página; JavaScript para a validação de formulários; A sintaxe JavaScript para Orientação a Objetos. Explore mais Visite as páginas sugeridas a seguir e saiba mais sobre o conteúdo estudado nesta aula: Básico de JavaScript <https://developer.mozilla.org/pt-BR/docs/Aprender/JavaScript> Uso de JavaScript com DOM <https://www.w3schools.com/js/js_htmldom.asp> Tutorial de JavaScript <https://www.w3schools.com/js/> Document Object Model <https://en.wikipedia.org/wiki/Document_Object_Model> https://developer.mozilla.org/pt-BR/docs/Aprender/JavaScript https://www.w3schools.com/js/js_htmldom.asp https://www.w3schools.com/js/ https://en.wikipedia.org/wiki/Document_Object_Model Disciplina: Programação Cliente-servidor Aula 3: JavaScript – Parte 2 Apresentação A partir do momento em que conseguimos construir nossas páginas, estruturando com o HTML e formatando com CSS, devemos cuidar da interatividade da mesma. A linguagem JavaScript será o ferramental necessário para prover esta interatividade, atuando por meio do DOM e dos eventos da página. Com o domínio dessas técnicas, podemos também efetuar a validação de nossos formulários, viabilizando diversas críticas acerca do formato e exigência dos dados envolvidos nos cadastros. Por �m, assim como em outras plataformas, o uso da orientação a objetos irá trazer maior robustez ao código implementado. Objetivos Explicar oselementos de interatividade com a página; Aplicar o JavaScript para a validação de formulários; Analisar a sintaxe JavaScript para orientação a objetos. Exemplo O exemplo a seguir ilustra a utilização da estrutura switch..case. Aqui, a página solicitará um valor entre 1 e 3, e, de acordo com o valor utilizado, será de�nida uma cor de fundo diferente para a palavra “XPTO”, sendo assumido fundo preto para opções que não forem previstas. Interação com a página HTML Precisamos ter em mente que o principal objetivo do JavaScript é expandir as funcionalidades básicas de uma página HTML. Para isso, deve ser capaz de interagir com seus componentes e com o utilizador da página. Fonte: (Markus Spiske / Unsplash) Neste contexto, temos dois caminhos que funcionam em sentidos inversos: O uso de DOM permitirá ao JavaScript acessar os componentes da página; Através de eventos, a página poderá acionar rotinas em JavaScript. Antigamente, a forma de acesso aos componentes HTML variava muito de um navegador para outro, mas a W3C padronizou o acesso aos componentes através do uso de document e identi�cadores do DOM. 1 W3C1 Modal: W3C – World Wide Web Consortium é uma comunidade internacional onde diversas organizações-membro, uma equipe em tempo integral e o público trabalham juntos para de�nir padrões para a Web. Fonte: https://www.w3.org/Consortium/ <https://www.w3.org/Consortium/> Métodos de acesso DOM Através de document, acessamos os elementos DOM de diferentes formas, sendo a mais tradicional através do atributo Id do elemento desejado, como podemos observar no exemplo: http://estacio.webaula.com.br/cursos/gon964/aula3.html https://www.w3.org/Consortium/ <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> </head> <body> <div id=="Camada1">PEQUENO TESTE</div> <script> var obj = document.getElementById("Camada1"); obj.style.backgroundColor = "yellow"; alert(obj.firstChild.nodeValue); </script> </body> </html> Inicialmente, devemos considerar as formas de acesso ao DOM proporcionadas através de document. Neste exemplo, a variável obj recebe uma referência ao componente div da página cujo Id é “Camada1”, observando as letras maiúsculas e minúsculas utilizadas, já que é case-sensitive. Alguns dos métodos de document para acesso aos componentes da página podem ser observados no quadro: Método Retorno getElementById Retorna um objeto como referência a um componente unicamente identificado através de seu atributo id getElementsByClassName Retorna uma coleção de objetos referenciando todos os componentes que apresentem o atributo class desejado getElementsByTagName Retorna uma coleção de objetos referenciando todos os componentes do tipo desejado, como button, div ou h1 querySelector Retorna um objeto com o primeiro elemento que utilize o seletor CSS querySelectorAll Retorna uma coleção de objetos com todos os elementos que utilizem o seletor CSS Assim como foi utilizado document.getElementById("Camada1"), poderíamos utilizar o comando document.querySelector(“#Camada1”) no lugar, e iríamos obter o mesmo resultado �nal. O objeto receptor assume as características do componente HTML referenciado, podendo ser acessados seus diversos atributos, como style, ou no caso de uma tag <input> atributos como value e maxLength. Ao mesmo tempo em que podemos utilizar os atributos HTML para o tipo de tag associado ao objeto, podemos observar este objeto como um nó de árvore da estrutura DOM, o que permite a navegação entre os nós e tipi�cação. Isto pode ser observado ao �nal do exemplo, onde é utilizado obj.�rstChild.nodeValue, correspondendo ao conteúdo do primeiro nó �lho de obj. Sempre devemos lembrar de que, em termos de DOM, obj corresponde a um nó do tipo Element, referenciando uma tag <div>, e o conteúdo HTML interno desta tag é um outro nó da árvore, do tipo Text, obtido com �rstChild. Como este outro nó é do tipo texto, o atributo nodeValue retornará o texto contido na tag original. Navegação DOM Incialmente, devemos lembrar que o DOM permite a manipulação de diferentes tipos de nós, como elementos, comentários e textos. Para descobrir qual o tipo de nó, podemos utilizar a propriedade nodeType, que é numérica, enquanto o nome do elemento associado pode ser obtido com nodeName, e o conteúdo do mesmo com nodeValue. A tabela a seguir mostra a relação entre estas três propriedades: nodeType Tipo de Nó nodeName nodeValue 1 Element Nome do Elemento (tag) Null 2 Attr Nome do atributo Valor do atributo 3 Text #text Conteúdo do nó 4 CDATASection #cdata-section Conteúdo do nó 5 EntityReference Referência de Entidade Null 6 Entity Nome da Entidade Null 7 ProcessingInstruction Alvo da ação Conteúdo do nó 8 Comment #comment Comentário na forma de texto 9 Document #document Null 10 DocumentType Nome do DocType Null 11 DocumentFragment #document-fragment Null 12 Notation Nome da notação Null Fonte: Adaptado de W3schools <https://www.w3schools.com/jsref/prop_node_nodetype.asp> https://www.w3schools.com/jsref/prop_node_nodetype.asp Exemplo Por exemplo, para uma tag do tipo <div>, teríamos nodeType com valor 1 (Element), nodeName com valor “_div_” e nodeValue nulo, e o conteúdo desta tag estaria em outros nós da árvore DOM, �lhos da mesma. Para um conteúdo texto simples, ainda com o exemplo da tag <div>, este poderia ser obtido com o uso de �rstChild.nodeValue, como foi feito no exemplo apresentado anteriormente. Atenção Neste ponto devemos observar os métodos de navegação. Por se tratar de uma árvore, devemos ter a possibilidade de acessar um nó especí�co, assim como os descendentes do mesmo. Para o acesso ao nó especí�co, normalmente a partir do id do mesmo, podem ser utilizadas as instruções getElementById ou querySelector, conforme discutido anteriormente, e a partir do nó localizado, podemos acessar os descendentes do mesmo. Exemplo Vamos observar o exemplo: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> </head> <body> <ul id="lista"> <li>Banana</li> <li>Laranja</li> <li>Manga</li> </ul> <script> var obj = document.querySelector("lista") var filhos = obj.children; var cores = ["orange","yellow","lightgreen"]; for (i = 0; i < filhos.length; i++) { filhos[i].style.backgroundColor = cores[i]; } </script> </body> </html> Neste exemplo, nós localizamos o início da lista com uso de querySelector("#lista"), e a partir deste elemento obtivemos os elementos <li> internos através do atributo children do nó. Como esses elementos são obtidos no formato ObjectHtmlCollection, é possível navegar nos mesmos como um vetor, aplicando as cores disponíveis no segundo vetor ao fundo de cada elemento através de style. Alguns dos atributos que podem ser utilizados pelo nó para a navegação na árvore podem ser observados no quadro: Atributo Conteúdo firstChild Retorna o primeiro filho do nó corrente childNodes Retorna uma coleção de nós contendo os filhos do nó corrente parentNode Retorna o nó que ascende ao nó corrente (pai) firstElementChild Retorna o primeiro filho do tipo Element para o nó corrente lastElementChild Retorna o último filho do tipo Element para o nó corrente children Retorna todos os filhos do tipo Element para o nó corrente De acordo com o tipo de nó existente na árvore, os atributos podem ser diferentes, mas a W3C traz uma documentação muito completa acerca de cada tipo de nó, como para o tipo Element, que representa as tags do HTML ou XML. Saiba mais A referência pode ser obtida no endereço https://www.w3schools.com/jsref/dom_obj_all.asp <https://www.w3schools.com/jsref/dom_obj_all.asp> . Eventos Podemos de�nir evento como uma ação pré-determinada que, ao ocorrer, permite que seja iniciada uma ação personalizada, o que certamente será feito através de programação. Por exemplo, ao clicar sobreo botão, inicie a função somar, o que poderia ser escrito da seguinte forma no HTML: Caso o evento não seja associado ao nível do HTML, ele pode ser atrelado ao objeto através de JavaScript e DOM, como no código a seguir: <button id="btn1" onClick="somar()">SOMAR</button> document.getElementById("btn1").addEventListener("click", function(event) { somar(); }); O método addEventListener recebe, como parâmetros, o nome do evento a ser utilizado e uma função callback para resposta ao evento. https://www.w3schools.com/jsref/dom_obj_all.asp Exemplo Observe um pequeno exemplo de utilização de evento sobre o clique do botão: Neste exemplo, a página contém apenas um botão, e, ao clicar sobre ele, aparecerá a mensagem “OLA MUNDO” em um alert. Podemos observar a associação do evento de clique com a função de tratamento na seguinte linha: Outra forma de associar seria diretamente no HTML: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> </head> <body> <button id="Teste1">Clique Aqui</button> <script> function mostraMensagem(){ alert("OLA MUNDO"); } var obj = document.querySelector("#Teste1"); obj.addEventListener("click",mostraMensagem); </script> </body> </html> obj.addEventListener("click",mostraMensagem); <button id="Teste1" onclick="mostraMensagem()"> Clique Aqui </button> Modi�cações dinâmicas Com o uso de DOM, podemos acessar, alterar ou criar elementos em uma página HTML de forma dinâmica, durante a sua visualização no navegador. É um processo razoavelmente simples, e que traz grande �exibilidade para a interface visual. Incialmente, devem ser utilizados alguns métodos de document para a criação dos nós de acordo com o tipo correto, e depois os métodos existentes para os nós DOM permitem o acréscimo, substituição ou remoção de outros nós. A tabela seguinte mostra alguns métodos existentes em document para a criação de nós DOM. Método createElement Cria um nó do tipo Elemento (tag) createTextNode Cria um nó de texto createAttribute Cria um atributo. O nó pode utilizar com setAttributeNode createComment Cria um comentário Os nós e atributos criados a partir de document podem ser utilizados e anexados a nós de elementos já existentes na estrutura da página, e o nó inicial da página pode ser obtido com o elemento body de document. var x = document.createComment("Apenas um comentário"); document.body.appendChild( x ); Exemplo O exemplo seguinte demonstra a utilização desta metodologia de inserção de nós: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> </head> <body> Nome:<input type="text" id="nome"> <button onclick="adicionar()">Adicionar</button> <ul id="lista"> </ul> <script> var lista = document.querySelector("#lista"); var texto = document.querySelector("#nome"); function adicionar(){ var node = document.createElement("LI"); var textnode = document.createTextNode(texto.value); node.appendChild(textnode); lista.appendChild(node); texto.value = ""; texto.focus(); } </script> </body> </html> Neste exemplo, criamos uma função adicionar onde, em sua implementação, é criado um nó de elemento do tipo <li> e um nó de texto contendo o valor da caixa identi�cada por “nome”. var node = document.createElement("LI"); var textnode = document.createTextNode(texto.value); Nas linhas seguintes, podemos observar o nó de texto sendo anexado ao nó de elemento, e o elemento <li> sendo adicionado à lista da página. node.appendChild(textnode); lista.appendChild(node); As duas últimas linhas tratam apenas de um re�no de interface onde, logo após a inserção, é limpo o texto existente na caixa e colocado o foco na mesma. Outra forma muito comum de modi�cação de conteúdo é com o uso do atributo innerHTML dos nós DOM. Com ele, podemos colocar qualquer conteúdo HTML dentro da tag representada pelo nó de elemento. Finalmente, podemos remover nós da árvore, a partir de um nó de elemento DOM, com o uso de removeChild, ou substituí-los com o uso de replaceChild. document.getElementById(“minhaDiv”).innerHTML = "<h1>TESTE</h1>"; Validação de formulários Entre diversas outras ações, devemos nos preocupar com a necessidade de: Podemos utilizar os recursos do HTML5 para efetuar parte dessas críticas, e o JavaScript para de�nir aquelas que não sejam cobertas por estes recursos. Um formulário é uma entrada de dados simples, que considera apenas texto e seleções, mas sem grandes críticas acerca de formato e validade destes dados. De�nir campos obrigatórios; Utilizar tipos de dados especí�cos; Controlar a visibilidade de campos alternativos. No entanto, devemos ter em mente que as críticas efetuadas do lado cliente são apenas relacionadas ao formato dos dados, e não à integridade da base. Críticas como violações de chave primária ou inexistência de registro na base só podem ser feitas no lado servidor. Também precisamos lembrar que o JavaScript pode ser desativado pelo usuário, o que tornaria o conjunto de validações inócuo, exigindo uma nova validação do lado servidor, e que realmente deve ser feita. Por que validar no cliente se temos que validar no servidor novamente? A resposta tem a ver com usabilidade e �uxo de rede, pois a resposta da validação de formato no cliente é mais rápida, além de diminuir o �uxo de rede com chamadas desnecessárias ao servidor, já que os dados serão criticados antes do envio. Assim como em todos os demais elementos de interatividade da página com as rotinas JavaScript, também na validação contamos com os eventos para de�nir o momento de acionamento da crítica ou formatação. Exemplo Podemos efetuar uma validação global a partir do evento onsubmit, como no exemplo seguinte. <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> </head> <body> <form method="get" action="//lugarnenhum" onsubmit="return validar();"> Nome:<input type="text" name="nome" id="nome"/><br/> Contribuinte:<input type="radio" name="contrib" id="contrib1" value="S">Sim <input type="radio" name="contrib" id="contrib2" value="N">Não <br/> <input type="submit" value="Cadastrar"/> </form> <script> function validar(){ var nome = document.getElementById("nome"), contrib1 = document.getElementById("contrib1"), contrib2 = document.getElementById("contrib2"); if(nome.value==""){ alert("Nome e obrigatório"); nome.focus(); return false; } if(!contrib1.checked && !contrib2.checked){ alert("Escolha uma opção de contribuinte"); return false; } return true; } </script> </body> </html> Devemos observar o formato da função de validação, que deverá retornar true ou false para o evento osSubmit, de forma a permitir ou não o envio da informação para o servidor. Por este motivo a chamada deste evento é um pouco diferente dos outros. Outro elemento interessante neste código é o uso de focus( ). Caso o nome não seja preenchido, a mensagem “Nome é obrigatório” é apresentada e o foco é direcionado para a caixa de texto referente a este dado. Para o teste dos componentes do tipo rádio, devemos veri�car se nenhum deles foi marcado. Para isso, utilizamos suas propriedades checked. <form method="get" action="//lugarnenhum" onsubmit="return validar();"> Lembrando que, pelo fato de a propriedade ser booleana, a negação será equivalente à comparação com false. if(!contrib1.checked && !contrib2.checked) Outras validações e formatações podem ser efetuadas no momento da perda do foco pela caixa de texto, ou quando selecionamos o elemento de uma lista de valores, entre diversas outras opções. Observe, no quadro seguinte, alguns eventos do HTML e suas respectivas aplicaçõesno processo de validação. Evento Aplicação onsubmit Efetua a validação do formulário imediatamente antes do envio para o servidor. Necessita o retorno booleano, indicando se os valores podem ser enviados ou não onclick Normalmente uma chamada explicita de validação. Muito utilizado em botões de rádio e caixas de marcação onchange Ocorre quando o valor (value) sofre uma alteração onfocus Ocorre quando o componente ganha o foco. Pode ser utilizado, por exemplo, para apagar o valor do campo onblur Ocorre na perda do foco pelo componente. É comum a aplicação de máscaras em valores numéricos como CEP e CPF onsearch Este evento é iniciado quando um usuário digita algo em um campo de pesquisa (type=”search”) onselect Utilizado quando algum texto é selecionado no campo Orientação a objetos Com a criação de sistemas cada vez maiores e com grande apelo visual, as técnicas tradicionais de modelagem e programação estruturada começaram a entrar em colapso. Complexos trechos de código inter-relacionados, junto com a documentação escassa e diversas replicações de processos já existentes, acabam tornando a manutenção dos sistemas extremamente difícil, aumentando o custo e diminuindo as possibilidades evolutivas destes sistemas. A orientação a objetos surge neste contexto, trazendo uma forma mais organizada de trabalho, onde a modelagem e a implementação mostram uma proximidade muito maior do que nas técnicas ditas tradicionais. Fonte: Vadim Sherbakov / Unsplash Saiba mais O termo Programação Orientada a Objetos (POO) foi criado por Alan Kay, autor da linguagem de programação Smalltalk. Mas, mesmo antes da criação do Smalltalk, algumas das ideias da POO já eram aplicadas, sendo que a primeira linguagem a realmente utilizar estas ideias foi a linguagem Simula 67, criada por Ole-Johan Dahl e Kristen Nygaard em 1967. Entretanto só veio a ser aceito realmente nas grandes empresas de desenvolvimento de Software por volta dos anos 1990. Fonte: Programação Orientada a Objetos/Introdução <https://pt.wikibooks.org/wiki/Programa%C3%A7%C3%A3o_Orientada_a_Objetos/Introdu%C3%A7%C3%A3o#Hist%C3%B3ria> Para podermos adotar esta nova �loso�a, devemos deixar de pensar em termos de processos e funções, pois isto é a metodologia estruturada, focada em funcionalidades pontuais e a organização das mesmas. Agora precisamos pensar de uma forma diferente, em termos de personagens, quais deverão apresentar características físicas e ações ou verbos. Por exemplo, na programação estruturada, diríamos que o projétil partiu no ângulo de 55 graus, sofrendo a ação da gravidade, e atingindo o prédio na altura do quarto andar, pois estamos de�nindo um processo. Em termos de orientação a objetos, consideraríamos que temos um personagem chamado tanque de guerra, e que ele é capaz de atirar um projétil. A mudança de foco é muito grande e tem como objetivo: Aumento do reuso de código; Facilidade de manutenção; Documentação automatizada. https://pt.wikibooks.org/wiki/Programa%C3%A7%C3%A3o_Orientada_a_Objetos/Introdu%C3%A7%C3%A3o#Hist%C3%B3ria Começamos a utilizar de forma mais ampla a programação orientada a objetos (POO) com o advento das interfaces grá�cas, pois �cou muito evidente que a programação estruturada não era a melhor opção para construir ambientes constituídos de janelas. Antigamente tínhamos que utilizar as APIs do sistema operacional para a construção de cada janela, de forma independente, mas, com a POO, podemos de�nir um personagem denominado “Janela”, que: Terá atributos como “posição”, “largura” e “altura”; e Será capaz de efetuar ações como “abrir”, “minimizar” e “maximizar”. A partir daí, podemos colocar a quantidade necessária de personagens deste tipo para implementar as interfaces de nossos sistemas. Abstração Um dos pilares da POO é o conceito de abstração, que se refere à de�nição de um modelo simpli�cado de algo maior. Quando abstraímos algo, estamos preocupados apenas com os detalhes que sejam relevantes para o problema de interesse, e estas abstrações serão representadas como classes na POO, que trazem a de�nição dos atributos e métodos suportados pelos personagens. Os atributos de�nem características físicas, como cor, idade, endereço etc., enquanto métodos são as ações, ou verbos, que podem ser praticadas, tais como comer, andar ou dormir. Uma classe funciona como um molde (tipo ou domínio), de forma a de�nir como serão os objetos criados a partir da mesma, como no exemplo seguinte, em JavaScript. function Pessoa(nome, idade){ this.nome = nome; this.idade = idade; } Atenção Neste exemplo, estamos de�nindo uma classe Pessoa, com o uso de function, segundo a sintaxe utilizada pelo JavaScript. Note que esta é uma abstração que de�ne o modelo Pessoa apenas a partir do nome e da idade. Qual é este nome e esta idade? Aqui entram os objetos, pois as classes de�nem o modelo que será seguido por suas instâncias (ou objetos), e estas instâncias assumem valores para os atributos de�nidos. EXEMPLO Observe o exemplo completo a seguir: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> </head> <body> <script> function Pessoa(nome, idade){ this.nome = nome; this.idade = idade; this.exibir = function( ) { alert(this.nome+" tem "+this.idade+" ano(s)"); } } var p1 = new Pessoa("Ana",25); var p2 = new Pessoa("Marcos",36); </script> <button onclick="p1.exibir()"/>P1</button> <button onclick="p2.exibir()"/>P2</button> </body> </html> Inicialmente, temos a classe Pessoa, criada através de function e com o uso do ponteiro this para a de�nição dos atributos nome e idade, além do método exibir, sem parâmetros. Podemos ler o ponteiro de autoreferência this como “deste”, ou seja, o atributo idade desta Pessoa (this.idade), ou o método exibir desta Pessoa (this.exibir). Atenção Uma observação a ser feita é que, assim como as classes são de�nidas com o uso de function, os métodos da mesma também são. Basta observar a de�nição do método exibir. Com a de�nição da classe Pessoa, podemos criar os objetos p1 e p2, cada um com seus próprios valores para os atributos nome e idade. Para instanciar os objetos, utilizamos o operador new, responsável por alocar a memória necessária para o novo objeto. Finalmente, podemos observar a chamada ao método exibir de p1 ou p2 a partir dos eventos presentes nos dois botões da página HTML. Ao clicar no botão com texto “P1” será acionado o método exibir do objeto p1, enquanto o botão com texto “P2” acionará o método exibir de p2. this.exibir = function() { alert(this.nome+" tem "+this.idade+" ano(s)"); } var p1 = new Pessoa("Ana",25); var p2 = new Pessoa("Marcos",36); <button onclick="p1.exibir()"/>P1</button> <button onclick="p2.exibir()"/>P2</button> Protótipo O uso de protótipo é uma peculiaridade do JavaScript e não uma característica própria da orientação a objetos. Na verdade, o JavaScript não apresenta um mecanismo especí�co para herança, que seria outro dos pilares da orientação a objetos, mas permite a utilização de prototype para expandir a funcionalidade de classes já existentes. Vamos considerar uma classe Pessoa constituída apenas de nome e sobrenome: Com o uso de prototype, podemos adicionar a nacionalidade para esta classe já existente. Claro, que exigirá uma inicialização prévia, já que o construtor não tem como prever o novo atributo. Da mesma forma que podemos adicionar um atributo, podemos adicionar um método a esta classe com o uso de prototype. function Pessoa(nome, sobrenome){ this.nome = nome; this.telefone = sobrenome; } Pessoa.prototype.nacionalidade = "Brasileiro(a)"; Pessoa.prototype.nomeCompleto = function( ) { return this.nome + " "+this.sobrenome; }; Atividade 1. O uso de DOM permite a modi�cação dinâmica de partes da página, com o acréscimo, remoção ou alteração de elementos, tratando de um elemento essencial na interação entre o JavaScript e a página. Observando o trecho de HTML abaixo, qual seria a instrução JavaScriptpara obter acesso ao elemento DIV e colocar nele a frase “EXERCICIO DOM”? <div id="XPTO">ALVO</div> a) document.getElementById("XPTO").value = "EXERCICIO DOM"; b) document.querySelector("#XPTO").value = "EXERCICIO DOM"; c) document.getElementById("XPTO").innerHTML = "EXERCICIO DOM"; d) document.querySelector(".XPTO").innerHTML = "EXERCICIO DOM"; e) document.querySelector("DIV").value = "EXERCICIO DOM"; 2. Você está criando um formulário para cadastro de leitores de um jornal na Web, onde devem constar os dados residenciais do leitor. A empresa pediu que dados como rua, bairro, cidade e estado sejam preenchidos automaticamente após o leitor digitar o CEP e sair da caixa de texto. Qual evento deve ser utilizado para efetuar este preenchimento? a) onblur b) onclick c) onexit d) onenter e) onchange 3. As linguagens da atualidade buscam metodologias mais organizadas para a programação, e a orientação a objetos acaba sendo amplamente adotada com este objetivo. O JavaScript também permite o uso desta metodologia, e, para de�nir atributos de uma classe, é utilizada uma palavra reservada especí�ca. Qual a palavra utilizada? a) function b) new c) inherited d) this e) super Notas Título modal 1 Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Título modal 1 Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Referências CASSATI, J. P. Programação Cliente em Sistemas Web. Rio de Janeiro: Estácio, 2016. DEITEL, P; DEITEL, H. Ajax, Rich Internet Applications e Desenvolvimento Web para Programadores. São Paulo: Pearson Education, 2009. PLOTZE, R. Tecnologias Web. Rio de Janeiro: Estácio, 2016. SANTOS, F. Tecnologias para Internet II. 1. ed. Rio de Janeiro: Estácio, 2017. Próxima aula Sintaxe JSON (JavaScript Object Notation); Bibliotecas JQuery; Biblioteca JQuery UI para construção de páginas. Explore mais Para entender melhor os assuntos tratados nesta aula, acesse estes materiais: Uso de JavaScript com DOM” <https://www.w3schools.com/js/js_htmldom.asp> “Eventos” <https://www.w3schools.com/tags/ref_eventattributes.asp> “Orientação a objetos em JavaScript” <https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Introduction_to_Object- Oriented_JavaScript> https://www.w3schools.com/js/js_htmldom.asp https://www.w3schools.com/tags/ref_eventattributes.asp https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript Disciplina: Programação Cliente-servidor Aula 4: JSON e JQuery Apresentação Hoje em dia é cada vez mais comum o uso de Web Services REST para comunicação B2C, principalmente no que se refere aos clientes móveis, como Android; isto trouxe para a sintaxe JSON um maior nível de importância, o que faz com que nós precisemos entender essa sintaxe, de forma a viabilizar a comunicação com diversos servidores. Outro assunto de grande relevância é a facilidade com que podemos criar páginas interativas e de visual extremamente agradável ao usarmos as bibliotecas JQuery, diminuindo nossa carga de trabalho na construção de interfaces modernas e responsivas. Portanto, é crucial para nós, desenvolvedores, aprendermos a lidar com as tecnologias JSON e JQuery. Objetivos Descrever a sintaxe JSON (JavaScript Object Notation); Examinar os fundamentos das bibliotecas JQuery; Usar a biblioteca JQuery UI para a construção de páginas. Fonte: Jantine Doornbos / Unsplash JSON A sintaxe JSON (JavaScript Object Notation) nos permite representar objetos de uma forma muito leve e simples. Note que falamos aqui de objetos, e não de classes, pois JSON não trabalha com classes, mas diretamente nos objetos. Não trabalhamos com métodos em JSON, mas apenas atributos, os quais são de�nidos através de pares chave-valor, onde a chave é texto e o valor pode assumir diferentes formatos. A de�nição do objeto JSON é iniciada com o uso de chaves, e os pares chave-valor são separados por vírgula. Após a de�nição de um objeto neste formato, podemos utilizá-lo como qualquer objeto padrão do JavaScript. Nós podemos utilizar vários tipos diferentes para o preenchimento do valor, conforme se observa na tabela seguinte. FORMATO DESCRIÇÃO EXEMPLO Texto Cadeia de caracteres delimitada por aspas "nome":"Joao" Número Valor numérico qualquer "ano":2018 Booleano Aceita true e false "ligado":true Nulo Representa valor nulo "setor":null Vetor Lista de valores delimitada por colchetes "lista":["red","green","blue"] Objeto Objeto JSON delimitado por chaves {"autor":"Mister K","ano":2018} Observe que os vetores aceitam diversos tipos de dados, inclusive objetos JSON, como podemos ver no exemplo seguinte. var pessoa1 = {"nome":"Joao", "telefone":"1111-1111"}; alert(p1.nome); Exemplo <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> </head> <body> <h1>Contatos dos Colaboradores</h1> <ul id="alvo"> </ul> <script> var dados = {"empregados": [ {"nome":"Joao" , "telefone":"1111-1111"}, {"nome":"Maria" , "telefone":"2222-2222"}, {"nome":"Luiz" , "telefone":"3333-3333"}, {"nome":"Paula" , "telefone":"4444-4444"} ]}; var lista = document.querySelector("#alvo"); for(i=0; i>4; i++){ var contato = dados.empregados[i].nome + " :: "+ dados.empregados[i].telefone; var novoElemento = document.createElement("LI"); var texto = document.createTextNode(contato) novoElemento.appendChild(texto); lista.appendChild(novoElemento); } </script> </body> </html> Neste exemplo nós temos um objeto JSON denominado dados, com apenas um atributo, chamado empregados. Este atributo, por sua vez, é um vetor de objetos JSON, cada um com os atributos nome e telefone. Os elementos da lista são inseridos dinamicamente com uso de DOM, e o texto é formado a partir dos dados presentes no vetor do objeto JSON, onde zero corresponde à primeira posição deste vetor e três corresponde à última. var contato = dados.empregados[1].nome + " :: " + dados.empregados[1].telefone; // contato recebe o nome e o telefone do segundo elemento do vetor // contato recebe o valor "Maria :: 2222-2222" Várias tecnologias atuais utilizam o JSON como formato texto para troca de informações, das quais podemos destacar os Web Services REST, com o uso muito ampliado pelo advento das plataformas móveis, como Android e iOS. Quando recebemos dados de plataformas como essa, os dados são texto e não objetos JSON, devendo ser transformados no JavaScript para utilização posterior. Para tal, devemos utilizar o método de conversão JSON.parse. Fonte: Sven / Unsplash alert(p1.nome); Fonte: Clément H / Unsplash Características Gerais do JQuery Agora que conhecemos as sintaxes JavaScript e JSON, podemos iniciar a utilização de uma biblioteca amplamente adotada pelo mercado no desenvolvimento de sistemas, que é a JQuery. Esta é uma biblioteca que executa do lado cliente, interagindo com os elementos da página e facilitando muitas das tarefas usuais no desenvolvimento das funcionalidades da interface. A primeira versão foi lançada em janeiro de 2006 e seu criador, Josh Resig, havia publicado anteriormente em seu blog os fundamentos básicos para a construção do JQuery: A premissa para o módulo é a seguinte: Usando o poder dos Seletores do Pseudo-CSS, vincule suas funções Javascript a vários elementos HTML no DOM. Josh Resig, em 22/08/2005 Saiba mais Microsoft e Nokia incluíram a biblioteca JQuery em suas plataformas em 2008, sendo adotada posteriormente por outros fabricantes. Hoje em dia, diversos frameworks
Compartilhar