Sintaxe
- Abreviação de ready-event por roosteronacid
- Quebras de linha e encadeamento por roosteronacid
- Filtros de aninhamento por Nathan Long
- Armazenar em cache uma coleção e executar comandos na mesma linha por roosteronacid
- Contém seletor por roosteronacid
- Definindo propriedades na criação de elementos por roosteronacid
- Acesse funções jQuery como faria com uma matriz por roosteronacid
- A função noConflict - Libertando a variável $ por Oli
- Isolar a variável $ no modo noConflict pelo nickf
- Modo sem conflito por roosteronacid
Armazenamento de dados
- A função de dados - vincular dados a elementos pelo TenebrousX
- Suporte a atributos de dados HTML5, em esteróides! por roosteronacid
- O plug-in de metadados do jQuery por Filip Dupanović
Otimização
- Otimize o desempenho de seletores complexos com roosteronacid
- O parâmetro context por lupefiasco
- Salvar e reutilizar pesquisas de Nathan Long
- Criando um elemento HTML e mantendo uma referência, Verificando se existe um elemento, Escrevendo seus próprios seletores por Andreas Grech
Diversos
- Verifique o índice de um elemento em uma coleção por redsquare
- Manipuladores de eventos ao vivo da TM
- Substituir funções anônimas por funções nomeadas por ken
- Estrutura Microsoft AJAX e ponte jQuery da Slace
- tutoriais em jQuery por egyamado
- Remover elementos de uma coleção e preservar a capacidade de cadeia por roosteronacid
- Declare $ this no início de funções anônimas de Ben
- FireBug Lite, plug-in Hotbox, informa quando uma imagem foi carregada e o CDN do Google por Color Blend
- Uso judicioso de scripts jQuery de terceiros por harriyott
- A cada função de Jan Zich
- Plug-in de extensões de formulário de Chris S
- Cada função assíncrona do OneNerd
- O plug-in de modelo jQuery: implementando lógica complexa usando funções de renderização por roosteronacid
javascript
jquery
roosteronacid
fonte
fonte
if ((var someDiv = $("#someDiv")).length) { /* do stuff with someDiv... */ }
someDiv
ter um escopo definido naif
declaração, porque não é; JavaScript suporta apenas escopo de funçãoO
data()
método do jQuery é útil e pouco conhecido. Permite vincular dados a elementos DOM sem modificar o DOM.fonte
Filtros de aninhamento
Você pode aninhar filtros (como o nickf mostrou aqui ).
fonte
Eu realmente não sou fã do
$(document).ready(fn)
atalho. Claro que reduz o código, mas também reduz a legibilidade do código. Quando você vê$(document).ready(...)
, você sabe o que está olhando.$(...)
é usado de muitas outras maneiras para fazer sentido imediatamente.Se você possui várias estruturas, pode usar
jQuery.noConflict();
o que diz, mas também pode atribuir uma variável diferente para ela assim:Muito útil se você tiver várias estruturas que podem ser
$x(...)
resumidas em chamadas de estilo.fonte
Ooooh, não vamos esquecer os metadados do jQuery ! A função data () é ótima, mas precisa ser preenchida por meio de chamadas jQuery.
Em vez de quebrar a conformidade do W3C com atributos de elementos personalizados, como:
Use os metadados:
fonte
data-*
atributos estão automaticamente disponíveis através de chamadas para.data()
Manipuladores de eventos ao vivo
Defina um manipulador de eventos para qualquer elemento que corresponda a um seletor, mesmo que ele seja adicionado ao DOM após o carregamento inicial da página:
Isso permite que você carregue conteúdo via ajax ou adicione-o via javascript e faça com que os manipuladores de eventos sejam configurados corretamente para esses elementos automaticamente.
Da mesma forma, para interromper a manipulação de eventos ao vivo:
Esses manipuladores de eventos ao vivo têm algumas limitações em comparação com os eventos regulares, mas funcionam muito bem na maioria dos casos.
Para mais informações, consulte a documentação do jQuery .
UPDATE:
live()
edie()
foram descontinuados no jQuery 1.7. Consulte http://api.jquery.com/on/ e http://api.jquery.com/off/ para obter funcionalidade de substituição semelhante.UPDATE2:
live()
foi obsoleto por muito tempo, mesmo antes do jQuery 1.7. Para versões jQuery 1.4.2+ anteriores a 1.7, usedelegate()
eundelegate()
. Olive()
exemplo ($('button.someClass').live('click', someFunction);
) pode ser reescrita utilizandodelegate()
como que:$(document).delegate('button.someClass', 'click', someFunction);
.fonte
Substitua funções anônimas por funções nomeadas. Isso realmente substitui o contexto do jQuery, mas parece mais com o uso do jQuery, devido à sua dependência das funções de retorno de chamada. Os problemas que tenho com funções anônimas inline são que eles são mais difíceis de depurar (muito mais fácil olhar para uma pilha de chamadas com funções com nomes distintos, em vez de 6 níveis de "anônimo"), e também o fato de várias funções anônimas dentro da mesma A cadeia jQuery pode se tornar difícil de ler e / ou manter. Além disso, funções anônimas normalmente não são reutilizadas; por outro lado, declarar funções nomeadas me incentiva a escrever código com maior probabilidade de ser reutilizado.
Uma ilustração; ao invés de:
Eu prefiro:
fonte
this
, você não pode obter OO "adequado" sem usar gabinetes. Eu costumo ir para um compromisso:$('div').click( function(e) { return self.onClick(e) } );
Definindo propriedades na criação do elemento
No jQuery 1.4, você pode usar um literal de objeto para definir propriedades ao criar um elemento:
... Você pode até adicionar estilos:
Aqui está um link para a documentação .
fonte
em vez de usar um alias diferente para o objeto jQuery (ao usar noConflict), eu sempre escrevo meu código jQuery envolvendo tudo em um fechamento. Isso pode ser feito na função document.ready:
Como alternativa, você pode fazer assim:
Acho que é o mais portátil. Eu tenho trabalhado em um site que usa o Prototype AND jQuery simultaneamente e essas técnicas evitaram todos os conflitos.
fonte
instanceOf
não vai funcionar, apenasinstanceof
. E não funcionará de qualquer maneira, porquejQuery instanceof jQuery
retornaráfalse
.$ == jQuery
é a maneira correta de fazer isso.Verifique o índice
O jQuery possui .index, mas é muito difícil de usar, pois você precisa da lista de elementos e transmite o elemento do qual deseja o índice:
O seguinte é muito mais fácil:
Se você deseja conhecer o índice de um elemento em um conjunto (por exemplo, itens de lista) em uma lista não ordenada:
fonte
index()
e obter o índice de seu pai.Atalho para o evento pronto
A maneira explícita e detalhada:
A abreviação:
fonte
Na função principal do jQuery, especifique o parâmetro context além do parâmetro seletor. A especificação do parâmetro context permite que o jQuery inicie a partir de uma ramificação mais profunda no DOM, em vez da raiz do DOM. Dado um DOM grande o suficiente, a especificação do parâmetro context deve ser traduzida em ganhos de desempenho.
Exemplo: localiza todas as entradas do tipo radio dentro do primeiro formulário no documento.
Referência: http://docs.jquery.com/Core/jQuery#expressioncontext
fonte
$(document.forms[0]).find('input:radio')
faz a mesma coisa. Se você olhar a fonte do jQuery, verá: se passar um segundo parâmetro para$
, ele realmente chamará.find()
.$('form:first input:radio')
?Não é realmente apenas o jQuery, mas fiz uma pequena ponte para o jQuery e o MS AJAX:
É muito bom se você estiver executando bastante ASP.NET AJAX, já que o jQuery é suportado pelo MS agora com uma boa ponte significa que é muito fácil executar operações do jQuery:
Portanto, o exemplo acima não é ótimo, mas se você estiver escrevendo controles do servidor ASP.NET AJAX, será fácil ter o jQuery dentro da implementação do controle do lado do cliente.
fonte
Otimize o desempenho de seletores complexos
Consultar um subconjunto do DOM ao usar seletores complexos melhora drasticamente o desempenho:
fonte
Falando de dicas e truques e também de alguns tutoriais. Eu achei essas séries de tutoriais (a série de vídeos “jQuery para iniciantes absolutos”) da Jeffery Way são MUITO ÚTEIS.
Ele tem como alvo os desenvolvedores que são novos no jQuery. Ele mostra como criar muitas coisas legais com o jQuery, como animação, Criando e removendo elementos e muito mais ...
Eu aprendi muito com isso. Ele mostra como é fácil usar o jQuery. Agora eu adoro e posso ler e entender qualquer script jQuery, mesmo que seja complexo.
Aqui está um exemplo que eu gosto de " Redimensionar texto "
1- jQuery ...
2- Estilo CSS ...
2- HTML ...
Recomendo esses tutoriais ...
http://blog.themeforest.net/screencasts/jquery-for-absolute-beginners-video-series/
fonte
Cada função assíncrona
Se você tiver documentos realmente complexos nos quais a execução da função jquery each () trava o navegador durante a iteração e / ou o Internet Explorer exibe a mensagem ' você deseja continuar executando este script ', esta solução salvará o dia.
A primeira maneira que você pode usá-lo é como cada ():
Um segundo parâmetro opcional permite especificar a velocidade / atraso entre as iterações, o que pode ser útil para animações ( o exemplo a seguir aguardará 1 segundo entre as iterações ):
Lembre-se de que, como isso funciona de forma assíncrona, não é possível confiar nas iterações antes da próxima linha de código, por exemplo:
Escrevi isso para um projeto interno e, embora tenha certeza de que pode ser aprimorado, funcionou para o que precisávamos, por isso espero que alguns de vocês o considerem útil. Obrigado -
fonte
Sintaxe abreviada-sugar-thing - Armazene em cache uma coleção de objetos e execute comandos em uma linha:
Ao invés de:
Eu faço:
Um caso de uso um tanto "real" pode ser algo nesse sentido:
fonte
$(this).siblings().removeClass("hover")
. Sei que isso soa muito pequeno, mas toda vez que você altera o DOM, outro redesenho do navegador pode ser acionado. Outras possibilidades incluem eventos anexados ao DOMAttrModified ou as classes alterando a altura do elemento que pode disparar outros ouvintes de eventos "redimensionados".cache.not(this).removeClass("hover")
Eu gosto de declarar uma
$this
variável no início de funções anônimas, então eu sei que posso fazer referência a um jQueried isso.Igual a:
fonte
Salvar objetos jQuery em variáveis para reutilização
Salvar um objeto jQuery em uma variável permite reutilizá-lo sem ter que procurar no DOM para encontrá-lo.
(Como @Louis sugeriu, agora uso $ para indicar que uma variável contém um objeto jQuery.)
Como um exemplo mais complexo, digamos que você tenha uma lista de alimentos em uma loja e queira mostrar apenas os que correspondem aos critérios de um usuário. Você tem um formulário com caixas de seleção, cada uma contendo um critério. As caixas de seleção têm nomes como
organic
elowfat
, e os produtos têm classes correspondentes -.organic
, etc.Agora você pode continuar trabalhando com esse objeto jQuery. Toda vez que uma caixa de seleção é clicada (para marcar ou desmarcar), comece na lista principal de alimentos e filtre para baixo com base nas caixas marcadas:
fonte
$
na frente. por exemplovar $allItems = ...
$
indica que este é um objeto jQuery, o que tornaria mais fácil diferenciar visualmente de outras variáveis.Parece que a maioria das dicas interessantes e importantes já foram mencionadas, portanto esta é apenas uma pequena adição.
A pequena dica é a função jQuery.each (objeto, retorno de chamada) . Todo mundo provavelmente está usando a função jQuery.each (retorno de chamada) para iterar sobre o próprio objeto jQuery porque é natural. A função do utilitário jQuery.each (objeto, retorno de chamada) itera sobre objetos e matrizes. Por um longo tempo, de alguma forma, não vi o que poderia ser, além de uma sintaxe diferente (não me importo de escrever todos os loops criados), e estou um pouco envergonhado por ter percebido sua principal força apenas recentemente.
O fato é que, como o corpo do loop no jQuery.each (objeto, retorno de chamada) é uma função , você obtém um novo escopo a cada vez no loop, o que é especialmente conveniente quando você cria fechamentos no loop.
Em outras palavras, um erro comum típico é fazer algo como:
Agora, quando você invocar as funções na
functions
matriz, receberá um alerta três vezes com o conteúdoundefined
que provavelmente não é o que você queria. O problema é que existe apenas uma variáveli
e todos os três fechamentos se referem a ela. Quando o loop termina, o valor final dei
é 3 esomeArrary[3]
éundefined
. Você poderia contornar isso chamando outra função que criaria o fechamento para você. Ou você usa o utilitário jQuery, que basicamente o faz por você:Agora, quando você invoca as funções, recebe três alertas com o conteúdo 1, 2 e 3 conforme o esperado.
Em geral, não é nada que você não possa fazer sozinho, mas é bom ter.
fonte
Acesse funções jQuery como faria com uma matriz
Adicionar / remover uma classe com base em um valor booleano ...
É a versão mais curta do ...
Não há muitos casos de uso para isso. Mesmo assim; Eu acho legal :)
Atualizar
Caso você não seja do tipo que lê comentários, o ThiefMaster ressalta que o toggleClass aceita um valor booleano , que determina se uma classe deve ser adicionada ou removida. No que diz respeito ao meu código de exemplo acima, essa seria a melhor abordagem ...
fonte
$('selector').toggleClass('name_of_the_class', b);
.Atualizar:
Basta incluir este script no site e você obterá um console Firebug que aparece para depuração em qualquer navegador. Não é tão completo, mas ainda é bastante útil! Lembre-se de removê-lo quando terminar.
Confira este link:
Dos truques CSS
Atualização: Encontrei algo novo; é o JQuery Hotbox.
JQuery Hotbox
O Google hospeda várias bibliotecas JavaScript no Google Code. Carregá-lo de lá economiza largura de banda e carrega rapidamente porque já foi armazenado em cache.
Ou
Você também pode usar isso para saber quando uma imagem está totalmente carregada.
O "console.info" do firebug, que você pode usar para despejar mensagens e variáveis na tela sem precisar usar caixas de alerta. "console.time" permite que você configure facilmente um cronômetro para agrupar um monte de código e ver quanto tempo leva.
fonte
Use métodos de filtragem sobre pseudo-seletores quando possível, para que o jQuery possa usar querySelectorAll (que é muito mais rápido que chiar). Considere este seletor:
A mesma seleção pode ser feita usando:
O que é mais rápido porque a seleção inicial de '.class' é compatível com QSA
fonte
Remover elementos de uma coleção e preservar a cadeia
Considere o seguinte:
A
filter()
função remove elementos do objeto jQuery. Nesse caso: Todos os elementos li que não contenham o texto "Um" ou "Dois" serão removidos.fonte
Alterando o tipo de um elemento de entrada
Eu me deparei com esse problema quando estava tentando alterar o tipo de um elemento de entrada já anexado ao DOM. Você precisa clonar o elemento existente, inseri-lo antes do elemento antigo e excluir o elemento antigo. Caso contrário, não funcionará:
fonte
Uso criterioso de scripts jQuery de terceiros, como validação de campo de formulário ou análise de URL. Vale a pena ver o que há para saber, quando você encontrar um requisito JavaScript em seguida.
fonte
Quebras de linha e encadeamento
Ao encadear várias chamadas em coleções ...
Você pode aumentar a legibilidade com quebras de linha. Como isso:
fonte
Use .stop (true, true) ao acionar uma animação para impedir que ela repita a animação. Isso é especialmente útil para animações de sobreposição.
fonte
Usando funções anônimas de execução automática em uma chamada de método, como
.append()
para iterar através de algo. IE:Eu uso isso para percorrer coisas que seriam grandes e desconfortáveis para sair do meu encadeamento para construir.
fonte
Suporte a atributos de dados HTML5, em esteróides!
A função de dados foi mencionada anteriormente. Com ele, você pode associar dados a elementos DOM.
Recentemente, a equipe do jQuery adicionou suporte para atributos de dados * * personalizados em HTML5 . E como se isso não bastasse; eles alimentaram a função de dados com esteróides, o que significa que você pode armazenar objetos complexos na forma de JSON, diretamente na sua marcação.
O HTML:
O JavaScript:
fonte