24 Janeiro 2006
Tabelas Dinâmicas
Acho que muitos não conheciam essa técnica HTML de inserção de dados em uma tabela via JavaScript, fazendo assim uma tabela dinâmica.
Continuo usando a prototype, que ela ajuda muito no desenvolvimento de programas em JavaScript, reduzindo o tamanho dos códigos e até mesmo o entendimento. Mas neste post vou utilizar o acesso direto as funções JavaScript bem como aos objetos do DOM.
A função de uma tabela em (X)HTML é de armazenar dados.
Se difundiu pelo mundo o uso de tabelas como uma forma de montar layouts de páginas HTML. Numa época que não haviam muitos padrões entre os browsers, isso ajudava no desenvolvimento de páginas que conseguiam ser iguais em plataformas diferentes. Esse "vício" continua até hoje, mas com algumas tendências de mudança, como Tableless. Essas tendências fizeram com que muitos webdesigners migrassem para o uso de formatações seguindo padrões normalizados pela W3C.
Os elementos de uma tabela são:
- <table></table>
- A tag principal de controle de tabela. Toda as partes de uma tabela ficam dentro dessa tag.
- <tr></tr>
- Ou Table Row, é a definição de uma linha na tabela. Dentro dela pode conter th ou td.
- <th></th>
- Ou Table Header, são as tags que definem células como header para a tabela.
- <tr></tr>
- Ou Table Data, são as células que contém dados na tabela.
- <thead></thead>
- Define a seção de cabeçalho da tabela
- <tbody></tbody>
- Define o corpo da tabela. Pode-se usar o tBody para formatar partes da tabela com estilos diferentes, podendo ter mais de um elemento tBody em uma tabela.
- <tfoot></tfoot>
- Define o rodapé de uma tabela.
- <caption></caption>
- Fornece a tabela um titulo ou descrição do que contém na tabela. Utilizando o caption a organização da informação é correta
Ainda existem os elementos COL e COLGROUP que estilos e agrupamento em colunas.
Vejamos um exemplo de tabela utilizando uma formatação estruturada:
<table id="tabela1">
<caption>Tabela 1</caption>
<thead>
<tr>
<th>Codigo</th>
<th>Nome</th>
<th>Idade</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="3">Rodapé da Tabela</td>
</tr>
</tfoot>
<tbody class="estilo1">
<tr>
<td>1</td>
<td>Pedro</td>
<td>25</td>
</tr>
<tr>
<td>2</td>
<td>João</td>
<td>30</td>
</tr>
</tbody>
</table>
Note que o tfoot está abaixo do thead, mas mesmo assim ele aparece no final da tabela.
Veja esse exemplo com uma aplicação de estilo simples: Exemplo 1
Vamos agora fazer as funções via JavaScript.
Para acessar a tabela via JavaScript fazemos o seguinte:
var table1 = document.getElementById("tabela1");
Com isso recuperamos a tabela do HTML.
Agora vamos excluir as linhas existentes na tabela. O atributo rows contém as linhas da tabela informada:
//Para pegar todas as linhas,
//exceto a ultima, é necessário colocar - 1
var totLinhas = i<table1.rows.length - 1;
//Removendo as linhas da tabela,
//iniciando pela segunda
for(i=1;totLinhas;i++){
//Seleciona a segunda linha para ser excluida
// para que não seja removido o cabeçalho
table1.deleteRow(1);
}
Para limpar a tabela é só fazer um loop que percorre todas as linhas e apague uma a uma, exceto o cabeçalho.
Para inserir uma linha é só utilizar o método insertRow(índice) capturando o retorno em uma variável.
var linha = table1.insertRow(1);
O Índice é a posição em que a linha irá aparecer na tabela. Coloque -1 para que apareça no final da tabela, 0 para sempre aparecer no inicio(isso fará com que a linha apareça acima do titulo), ou 1 para aparecer na segunda linha e caso tenha mais linhas é só mudar o índice.
Após isso utilize a variavel linha para inserir as celulas para essa linha:
//Inserção de Celulas
var coluna1 = linha.insertCell(-1);
//Definindo o estilo para a célula
coluna1.className = "celula1";
//Definindo o conteúdo para a célula
coluna1.innerHTML = "1";
var coluna1 = linha.insertCell(-1);
coluna1.className = "celula1";
coluna1.innerHTML = "Pedro";
var coluna1 = linha.insertCell(-1);
coluna1.className = "celula1";
coluna1.innerHTML = "25";
Ao criar a célula e armazenarmos o conteúdo na variavel coluna1 ainda foi inserido o estilo e o texto que aparecerá na célula. Pode também ser definido uma cor de fundo e qualquer propriedade que a celula venha a ter.
Veja o exemplo completo: Exemplo 2
22 Janeiro 2006
Acessando banco de dados
O método que mais uso, e nem sei se posso chamar de AJAX, pois não utilizo XML, é retornando um array de uma página que acessa informações no banco em JavaScript que contém um objeto com o resultado do banco.
Para isso veremos o codigo da página php que processa a requisição:

var Usuarios = new Array();
Usuarios[0] = new Object();
Usuarios[0].Nome = 'Joao';
Usuarios[0].Login = 'lolados1';
Usuarios[0].Email = 'teste1@lolados.com';
Usuarios[1] = new Object();
Usuarios[1].Nome = 'Luiz';
Usuarios[1].Login = 'lolados2';
Usuarios[1].Email = 'teste2@lolados.com';
Usuarios[2] = new Object();
Usuarios[2].Nome = 'Carlos';
Usuarios[2].Login = 'lolados3';
Usuarios[2].Email = 'teste3@lolados.com';
Usuarios[3] = new Object();
Usuarios[3].Nome = 'Pedro';
Usuarios[3].Login = 'lolados3';
Usuarios[3].Email = 'teste4@lolados.com'
Acesse o retorno desse script
Dessa maneira, conseguimos trazer qualquer informação e de uma forma bem fácil de carregar em uma página solicitante. Veja a parte do JavaScript que faz essa solicitação:

A função de retorno do Ajax.Request eCarregaUsuarios, recebe o objeto de retorno da solicitação.
É feita uma validação no conteúdo para ver se foi retornado com o conteúdo de Usuários, validando o texto é executado pela função eval() do JavaScript, que faz com que o conteudo de um texto seja transformado em script.
Após isso é só acessar o array de Usuarios como se tivesse na página, pois a função eval() fez com que estes existam.
Veja o exemplo funcionando: Exemplo 1
16 Janeiro 2006
Tutorial prototype -> Objeto Insertion
Insertion.Before(elemento, valor) - Insere antes do elemento
11 Janeiro 2006
Tutorial prototype -> Classes em JavaScript
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">
//Nesta linha é criada uma variavel que será uma classe
var Aluno = new Class.create();
//Declaração da classe;
Aluno.prototype = {
//Esse método é usado como construtor da classe
//Nele passa-se os parametros da construção da classe
// e se inicia as váriaveis
initialize: function (vCodigo, vNome){
this.codigo = vCodigo;
this.nome = vNome;
// o objeto "this" faz referencia a variaveis da classe
}, //Utilize virgula entre uma função e outra
// esse método ira imprimir as informações do aluno
Imprimir: function(){
document.write("Codigo:" + this.codigo + "<br />");
document.write("Nome:" + this.nome + "<br />" );
}
}
var cAluno = new Aluno(123,'Pedro');
cAluno.Imprimir();
</script>
04 Janeiro 2006
Gerenciador de documentos AJAX
Microsoft x Google
Ajax Desktop
03 Janeiro 2006
Tutorial prototype -> Ajax.Updater
02 Janeiro 2006
Tutorial prototype -> Ajax.Request
<HTML>
<HEAD>
<TITLE>Exemplo Ajax</TITLE>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1" />
<script type="text/javascript" src=" prototype.js"></script>
<script type="text/javascript">
function AbreAjax(){
//URL com a página que será chamado
var url = "http://www.lolados.com/ajax/exemplos/capitais.php ";
//parametros da URL (utilizando o serialize)
var pars = Form.serialize("frmEstado" );
Form.disable("frmEstado");
//Chamando metódo Ajax.Request()
var myAjax = new Ajax.Request( url, {method: 'post',
parameters: pars,
onComplete: MostraCapital,
onSuccess: Sucesso,
onFailure: ComErro} );
}
//função que trata erros
function ComErro(or1){
alert("Houve um erro na solicitação das informações." );
Form.enable("frmEstado");
}
function Sucesso(or1){
$("Sucesso").innerHTML = "Informações carregadas com sucesso." ;
setTimeout("$('Sucesso').innerHTML = ''",2000);
Form.enable("frmEstado");
}
//função que é chamada ao final do carregamento da página
function MostraCapital(or1){
if (or1.responseText != "")
//Pega o retorno da Solicitação e preenche a div
$("Capital").innerHTML = "A capital de "
+ $F("estado") + " é " + or1.responseText ;
else
$("Capital").innerHTML = "";
Form.enable("frmEstado");
}
</script>
</HEAD>
<BODY>
<h2>Consulta Capital</h2>
<form name="frmEstado" id="frmEstado">
<div id="Capital" style="font-weight:bold;color:red;"></div>
Estado: <input type="text" name="estado" id="estado" size="2" maxlength="2" /><br />
<input type="button" value="Solicitar Estado"onclick="AbreAjax()" />
<div id="Sucesso" style="font-weight:bold;color:navy;"></div>
</form>
</BODY>
</HTML>
Tutorial prototype -> Atalhos e funções
Função $("ID do elemento")
Essa função é sensacional.. Sam Stephenson estava inspirado quando criou ela.. alias, ela já devia ter sido criado pela Netscape quando lançou o JavaScript.
Com essa função é possivel acessar qualquer elemento html editavel que tenha uma propriedade id definida na tag.
Ela funciona igual a propriedade document.getElementById() só que ela vai um pouco mais além.
Diferente da função original ela aceita mais de um argumento, o que fará a função retornar um array com todos os elementos solicitados.
Veja o Exemplo:
<HTML>
<HEAD>
<TITLE>Teste da função $()</TITLE>
<script src="prototype.js"></script> <script>
function teste1() {
var d = $('minhaDiv');
alert(d.innerHTML);
}
function teste2(){
var divs = $('minhaDiv','minhaOutraDiv');
for(i=0; i<divs.length; i++){
alert(divs[i].innerHTML);
}
}
</script>
</HEAD>
<BODY>
<div id="minhaDiv">
<p>Paragrafo da primeira div</p>
</div>
<div id="minhaOutraDiv">
<p>Paragrafo da outra div</p>
</div>
<input type="button" value=Test1 onclick="teste1();"><br>
<input type="button" value=Test2 onclick="teste2();"><br>
</BODY>
</HTML>Para testar esse exemplo clique aqui: Exemplo 1
Para que os acessos funcionem lembre sempre de nomear os elementos com a tag ID.
Função $F("ID do elemento de formulário")
Essa é outra função que ajuda muito no momento de desenvolver.
Ela retorna o valor de qualquer campo de formulário.
Essa função pode receber tanto o ID do elemento como o objeto.
Para testar esse exemplo clique aqui: Exemplo 2
Utilizando Try.these()
Quando você precisa experimentar diferentes chamadas de funções sabendo que uma delas pode dar erro geralmente tem que fazer uma série de tratamentos pra ver se existe ou até mesmo fazer o seu tratamento de erros para o código.
Seus problemas acabaram. Essa função consegue executar uma lista de funções até que uma dê certo, aí ela sai fora.
No exemplo abaixo uma é executada duas solicitações do elemento xmlNode. Em cada browser funciona de uma maneira:
<script>
function getXmlNodeValue(xmlNode){return Try.these(
function() {return xmlNode.text;},
function() {return xmlNode.textContent;)
);
}
</script>
Quaqluer duvidas me escrevam.
Tutorial prototype -> Objeto Form
Assinar Postagens [Atom]