cssQuery - substituto ao getElementsById e getElementsByTagName
Todo mundo que programa em javascript se cansa de ter que digitar “document.getElementById” ou “document.getElementsByTagName” (ufa, cansei) toooooooda vez que quer selecionar determinado elemento ou grupo de elementos. É ou não é?
Então, após 3 digitadas destes métodos, agente vai lá e programa uma funçãozinha pra simplificar isso. É ou não é?
Na net existem infindáveis funções pra substituir o 1 ou o 2 (não vou digitar tudo denovo não heahe). Todo mundo tem sua velha função $() ou gE() ou gEid(). É ou não é?
Mas as funções que fazem isso “mais mió de bão” estão dentro de frameworks. O que é uma pena pra quem não usa frameworks.
No meu pouco conhecimento, a melhor atualmente é a do jquery que guenta seletores CSS como parâmetro e outros seletores mó bizarros.
Se você não sabe as facilidades dos seletores CSS, dê uma estudada.
O objetivo deste post do mico é mostrar uma ótima solução pra você que não usar frameworks ou cujo framework ou função não suporte fazer a seleção usando seletores CSS:
“getElementsByTagName? Pah!”
É assim que o ultra-top-master de javascript começa a explicação (mico paga pau).
Sintaxe:
elements = cssQuery(selector [, from]);
Exemplos:
// retorna todos os parágrafos que são filhos diretos de body
var tags = cssQuery("body > p");
// retorna todos os elementos que tenham o atributo 'href'
var tags = cssQuery("[href]");
// retorna os elementos que o atributo 'href' é igual a '#'
var tags = cssQuery("a[href='#']");
// procura todas as imagens dentro dos links retornados acima
var images = cssQuery("img", tags);
// pega todas as listas
var tags = cssQuery("dl,ol,ul");
// até em xml externos
var tags = cssQuery("my|:root>my|link", myXMLDoc);
// você entende isso?
var complex = "p>a:first-child+input[type=text]~span";
var tags = cssQuery(complex);
Seletores suportados:
*
E
E F
E > F
E + F
E ~ F
E.warning
E#myid
E:link
E:first-child
E:last-child
E:nth-child(n)
E:nth-last-child(n)
E:only-child
E:root
E:lang(fr)
E:target
E:enabled
E:disabled
E:checked
E:contains("foo")
E:not(s)
E[foo]
E[foo="bar"]
E[foo~="bar"]
E[foo^="bar"]
E[foo$="bar"]
E[foo*="bar"]
E[foo|="bar"]
Guentado no IE, FF, OP, Netscape e Safari.
E aí? Vai trocar suas velhas $() ??
//Há uma lenda aí dizendo que o próximo Firefox vai suportar o velho $() . Será? Procurei um link e não achei. More informations please.
Janeiro 17th, 2008 12:33
Oi Náiron, a idéia deste cssQuery() é realmente muito boa.
Quanto ao Firefox com $(), não soube nem de rumores. As melhorias no DOM estão listadas aqui: http://developer.mozilla.org/en/docs/DOM_improvements_in_Firefox_3
Abraço!
Janeiro 17th, 2008 16:35
Salve Micox, muito bom!! Mas pode-se procurar pelo id do elemento??
Fuiii…
Janeiro 17th, 2008 21:58
@Leandro Mercês.
ah, então foi só boato mesmo heheh. Você é o cara que tá por dentro das parada do MDC. Falou e disse heheh.
@Ramon
haheahe, já tô vendo que não saca de seletores CSS não né? É claro que dá pra pegar por ID, é só usar o seletor de CSS para id hehehe
Janeiro 18th, 2008 11:52
Haha, nem saco mto, mas escrevi sem pensar msm.
eu uso # direto e nem me liguei nisso. =p
Mas tem um monte de seletores que vou estudar.
abs
Janeiro 18th, 2008 11:52
Haha, nem saco mto, mas escrevi sem pensar msm.
eu uso # direto e nem me liguei nisso. =p
Mas tem um monte de seletores que vou estudar.
abs
Janeiro 25th, 2008 19:39
Dean Edwards é mesmo o cara! Deve ser um script um tanto grande… Vou estudar e colocar na minha biblioteca de funções. Valeu!
Fevereiro 7th, 2008 20:01
Bacana a função, porém achei meio grande o.O
Que tal extraírmos a do JQuery? Ela é bem completa e pelo que consegui ver no fonte do jquery é bem menor que essa do Dean
Vlws