Mostrando postagens com marcador JQuery. Mostrar todas as postagens
Mostrando postagens com marcador JQuery. Mostrar todas as postagens

sábado, 16 de junho de 2018

Data Attributes – O que são e como usar


Olá, hoje eu vou falar sobre algo que eu particularmente acho muito legal do HTML 5, que são os Data Attributes, ou simplesmente atributos de dados (data-*). Não é algo novo, rsrsrs mas muitas pessoas não usam e muitas usam e nem entendem o que estão fazendo. Você já precisou recuperar no JavaScript valores de um <li>, <ul>, <div> ou qualquer outra tag que não lhe dê a opção de retornar valores como as tags<input>? Bom, com os Data Attributes isso é possível.

O HTML 5 foi desenvolvido para ser extensível, podendo ter dados associados a um elemento específico através de atributos mesmo que esses atributos não tenham sido definidos pela linguagem. Ou seja, podemos adicionar informações a atributos não padrão do HTML e depois recuperar essas informações para usá-las de alguma forma.

Esses atributos valorados não devem conter nenhuma informação confidencial, pois ficam expostos no HTML. Servem para facilitar a manipulação de informações no JavaScript e CSS. Com ele podemos adicionar informações em links, botões, formulários, etc.

A forma de usar é bastante simples, basta declarar um atributo data-* e atribuir o valor desejado. Ex:

<article
  id="carrosEletricos"
  data-columns="3"
  data-index-number="12314"
  data-parent="carros">
...
</article>

Uma vez tendo criado os atributos podemos acessá-los via JavaScript de várias formas e trabalhar em cima dos valores, inclusive alterando-os.

Podemos acessar o valor do atributo diretamente através de um método disponibilizado para varrer os atributos dos elementos HTML - element.getAttribute(“nomeDoAtributo”);. Caso o atributo não exista, o valor retornado será null ou “”. Esse método pode ser usado para atributos padrões do HTML ou os Data Attributes criados. Ex:

<script>
var artigo = document.getElementById(‘carrosEletricos’);
var atributo = artigo.getAttribute(“columns”);
</script>

Mas o padrão recomendado é usando a propriedade dataset do DOMStringMap para recuperar os dados, então teríamos:

<script>
var article = document.getElementById(‘carrosEletricos’);

var colunas = article.dataset.columns; // "3"
var index = article.dataset.indexNumber; // "12314"
var pai = article.dataset.parent; // "carros"
// setar um valor
article.dataset.columns = 5;
</script>

          É claro que podemos também acessar via JQuery:

<script>
var artigo = $("#carrosEletricos");

var colunas = artigo.data("columns"); // "3"
var index = artigo.data("indexNumber"); // "12314"
var pai = artigo.data("parent"); // "cars"
</script>

Abaixo segue um outro exemplo onde temos uma lista de funcionários onde queremos armazenar alguns valores como matricula, idade e sexo, mas não mostrá-los na tela:

<ul>
  <li data-matricula="001" data-idade="23" data-sexo="M" onclick="chamaFuncao(this)">Pedro</li>
  <li data-matricula="002" data-idade="28" data-sexo="M" onclick="chamaFuncao(this)">Daniel</li>
  <li data-matricula="003" data-idade="30" data-sexo="F" onclick="chamaFuncao(this)">Joana</li>
</ul>

Os atributos criados também podem ser usados diretamente no CSS, para isto vamos voltar ao exemplo da tag artigo. Para mostrar o atributo data-parent como conteúdo poderíamos ter o código abaixo:


article::before {
  content: attr(data-parent);
}

Ou usar os “Attribute Selectors” – atributos seletores, que correspondem a elementos com base em seu valor ou simplesmente em sua existência:

// baseado na existência:
article[data-columns] {
       border-right: 1px #bbdefb groove;
}

// baseado no valor:
article[data-columns='3'] {
       width: 400px;
}

article[data-columns='4'] {
       width: 600px;
}

Quando usado por valor, o CSS traz várias opções de comparação e não apenas o “=”. Essas opções funcionam como as Regex do Java ou RegExp do JavaScript. Veja os exemplos:
  
Consideremos o HTML abaixo:

<ul>
  <li><a href="#internal">Internal link</a></li>
  <li><a href="http://example.com">Example link</a></li>
  <li><a href="#InSensitive">Insensitive internal link</a></li>
  <li><a href="http://example.org">Example org link</a></li>
</ul>

<div lang="en-us en-gb en-au en-nz">Hello World!</div>
<div lang="pt">Olá Mundo!</div>
<div lang="zh-CN">世界您好!</div>
<div lang="zh-TW">世界您好!</div>
<div data-lang="zh-TW">?世界您好!</div>


Tendo então as seguintes regras CSS:

a {
  color: blue;
}

/* links internos, começando com "#" */
a[href^="#"] {
  background-color: gold;
}

/* Links com "example" em qualquer parte da URL */
a[href*="example"] {
  background-color: silver;
}

/* Links com "insensitive" em qualquer parte da URL,
   desconsiderando letras maiúsculas e minúsculas -> (i) */
a[href*="insensitive" i] {
  color: cyan;
}

/* Links que terminam ".org" */
a[href$=".org"] {
  color: red;
}

/* Todas as divs com atributo 'lang' são bold. */
div[lang] {
  font-weight: bold;
}

/* Todas as divs em US são azuis. */
div[lang~="en-us"] {
  color: blue;
}

/* Todas as divs em Português são verdes. */
div[lang="pt"] {
  color: green;
}

/* Representa elementos com um nome de atributo
   cujo valor pode ser exatamente igual ou pode
   começar com valor imediatamente seguido por um hífen( - ).
   É frequentemente usado para correspondências de subcódigo
   de idioma.
   Todas as divs em Chinês são vermelhas, mesmo se
    simplificado (zh-CN) ou tradicional (zh-TW). */
div[lang|="zh"] {
  color: red;
}

/* Todas as divs com 'data-lang' Chinês Traditional
   são roxas. */
div[data-lang="zh-TW"] {
  color: purple;
}

Os resultados seriam:



Espero que possa ter ajudado, seguem os links que usei para fazer esse post:


quinta-feira, 24 de março de 2016

Formatação de campos de valor Monetário

        Trabalhar com valores monetários em páginas WEB é meio chato, porém vou mostrar duas maneiras de facilitar esse trabalho, uma é do próprio primefaces, e outra é com JQuery, que funciona em qualquer aplicação web, bastando configurar corretamente.

         Primeiro vamos a solução com primefaces, que é uma biblioteca de extensão que deve ser adicionada ao projeto. Vamos então configurar no arquivo pom.xml o seguinte:

<dependencies>
    ...   
    <dependency>
        <groupId>org.primefaces.extensions</groupId>
        <artifactId>primefaces-extensions</artifactId>
        <version>4.0.0</version>
    </dependency>
    ...
</dependencies>

         Depois, temos que adicionar na página xhtml o namespace da extensão do primefaces no topo da página:

xmlns:pe="http://primefaces.org/ui/extensions"

         E então podemos usar a biblioteca de extensão para formatarmos os componentes que guardarão valores monetários.

<pe:inputNumber id="valor" value="#{meuManagedBean.valor}" symbol=" R$" 
symbolPosition="s" decimalSeparator="," thousandSeparator="." decimalPlaces="2/>

Caso dê algum erro de conversão, você pode adicionar o seguinte componente:

<pe:inputNumber id="valor" value="#{meuManagedBean.valor}" symbol=" R$"
symbolPosition="s" decimalSeparator="," thousandSeparator="." decimalPlaces="2>

<f:convertNumber maxFractionDigits="2" minFractionDigits="2"/>

</pe:inputNumber>

Agora vamos fazer a biblioteca JQuery-MaskMoney. Basta fazer o download da biblioteca no link http://plentz.github.io/jquery-maskmoney, lá tem o arquivo zip para baixar. Então crie o diretório “js” dentro da pasta resources em webapp como mostra a imagem a seguir:



Se você trabalha com templates do facelets basta adicionar isso no cabeçalho do template, se não, terá que adicionar nas paginas que irá precisar. Dentro do header coloque:

<h:outputScript library="js" name="jquery.maskMoney.js"/>

      Dentro do body, no final crie a função:

<script>

function configurarMoeda(objeto){
$(objeto).maskMoney({decimal: ",", thousands: ".", allowZero: true, symbolStay: "R$"});
       }
      
</script>
        
         Então basta chamar no componente que deseja usar da seguinte forma:
 
<p:inputText id="valorUnitario" value="#{meuManagedBean.valorUnitario }" 
onfocus="configurarMoeda(this);">
        <f:convertNumber maxFractionDigits="2" minFractionDigits="2"/>
<p:inputText>


     Se você não trabalha com primefaces, no link do download do JQuery-MaskMoney você vai encontrar ajuda para usar a biblioteca. Abraços!
            
ATENÇÃO! <pe:inputnumber> foi removido das extensões do PF e agora faz parte do pacote principal, então nas versões mais recentes, simplesmente substitua <pe:inputNumber> por <p:inputNumber>.

Links úteis: