Ak pridávame mnoho elementov je dobré si najskôr pripraviť hotové HTML a pridať ho ako celok ako pridávať každý element zvlášť.
O tom, že selektor ktorý používame viac krát je dobre cachovať sme si písali už v Uchovávajte elementy. Poďme ale hlbšie:
var $myList = $('#myList');
var li = '';
for(var i=0; i<10; i++) {
li += "Takmer všetky jQuery metódy vracajú jQuery objekt a podporujú reťazenie. To znamená, že po spracovaní metódy môžte pokračovať spracovaním ďalších. To prináša menší a ľahšie pisateľný kód.
// bez retazenia
$('#notification').fadeIn('slow');
$('#notification').addClass('.activeNotification');
$('#notification').css('marginLeft', '50px');
// s retazenim
$('#notification')
.fadeIn('slow')
.addClass('.activeNotification')
.css('marginLeft', '50px')
Porovnávací test http://jsperf.com/jquery-chaining
Ak používate nejaký selektor na viacerých miestach, rozhodne ho uchovajte v premennej.
var parents = $('.parents'), // zapamatanie
children = $('.parents').find('.child'), // zle
kids = parents.find('.child'); // spravne
Porovnávací test http://jsperf.com/ns-jq-cached
Necachované selektory dosahujú až 62% spomalenie oproti ich cachovanému ekvivalentu.
$('a').bind('a', function() {
console.log('klikli ste na: ' + $(this).attr('id'));
});
môže byť o 80-95% pomalší ako:
$('a').bind('a', function() {
console.log('klikli ste na: ' + this.id);
});
$(this).attr('id') vs this.id http://jsperf.com/el-attr-id-vs-el-id/2
Pri vyvolávaní AJAX požiadaviek, potrebujete často vyvolať nejaký ukazovateľ, že prebieha nejaká akcia.To môžte docieliť pomocou nejakého loadingu alebo modálnym oknom a podobne. Volanie tohto ukazovateľa pri každej $get a $post požiadavke by bolo veľmi pracné.
Najlepším riešením je nastavenie predvolených hodnôt použitím jednej jQuery metódy
// ajaxSetup - nastavenie predvolených hodnôt
$.ajaxSetup({
url : '/ajax/',
dataType : 'json'
});
$.ajaxStart(function(){
showIndicator();
disableButtons();
});
$.ajaxComplete(function(){
hideIndicator();
enableButtons();
});
/*
// Dalsie metody, ktore mozte pouzit:
$.ajaxStop();
$.ajaxError();
$.ajaxSuccess();
$.ajaxSend();
*/
Reťazenie metód je silným nástrojom jQuery a ním sa dá dosiahnuť reťazenie efektov animácie. Ak chceme zdržať vykonanie ďalšej animácie môžeme medzi ne vložiť delay metódu.
Takže namiesto tohto:
$('#elem').animate({width:200},function(){
setTimeout(function(){
$('#elem').animate({marginTop:100});
},2000);
});
To môžeme spraviť takto:
$('#elem').animate({width:200}).delay(2000).animate({marginTop:100});
Ak využívate nejaký kód niekoľko krát, zvážte či ho nepremeniť na plugin. To umožní jeho znovupoužitie a sprehľadní kód. Tak isto sa potom tento kód dá využiť v inom projekte.
Premena je pritom veľmi jednoduchá:
(function($){
$.fn.nazovPluginu = function(){
// kod
return this;
};
})(jQuery);
jQuery umožňuje pridávať vlastné pseudo-selektory. To sa dá jednoducho docieliť pridaním funkcie do $.expr[':'] objektu.
(function($){
var random = 0;
$.expr[':'].random = function(a, i, m, r) {
if (i == 0) {
random = Math.floor(Math.random() * r.length);
}
return i == random;
};
})(jQuery);
A ako to použiť:
$('li:random').addClass('glow');
Niekedy možno budete potrebovať vytvoriť prázdny jQuery objekt a neskôr ho vyplniť pomocou .add metódy.
var container = $([]); container.add(another_element);
$('a').each(function(index, value){
console.log($('a').attr('href'));
});
var json = [
{ "red": "#f00" },
{ "green": "#0f0" },
{ "blue": "#00f" }
];
$.each(json, function() {
$.each(this, function(name, value) {
console.log(name + '=' + value);
});
});
vypíše red=#f00 green=#0f0 blue=#00f
var pole = ['nula','jedna','dva','tri'];
jQuery.each(pole , function(index, value){
console.log(index + ':' + value);
});
vypíše 0:nula 1:jedna 2:dva 3:tri
Vypne všetky jQuery efekty
$(document).ready(function() {
jQuery.fx.off = true;
});
Potrebujete prepísať div niečím iným?
$(document).ready(function() {
$('#id').replaceWith('Tu bol kedysi div #id');
});
$(document).ready(function() {
// Reset the font size(back to default)
var originalFontSize = $('html').css('font-size');
$(".resetFont").click(function(){
$('html').css('font-size', originalFontSize);
});
// Increase the font size(bigger font0
$(".increaseFont").click(function(){
var currentFontSize = $('html').css('font-size');
var currentFontSizeNum = parseFloat(currentFontSize, 10);
var newFontSize = currentFontSizeNum*1.2;
$('html').css('font-size', newFontSize);
return false;
});
// Decrease the font size(smaller font)
$(".decreaseFont").click(function(){
var currentFontSize = $('html').css('font-size');
var currentFontSizeNum = parseFloat(currentFontSize, 10);
var newFontSize = currentFontSizeNum*0.8;
$('html').css('font-size', newFontSize);
return false;
});
});
$(document).ready(function() {
function equalHeight(group) {
tallest = 0;
group.each(function() {
thisHeight = $(this).height();
if(thisHeight > tallest) {
tallest = thisHeight;
}
});
group.height(tallest);
}
// how to use
$(document).ready(function() {
equalHeight($(".left"));
equalHeight($(".right"));
});
});
Pri používaní tabuliek, je dobrý nápad, pre lepšiu čitateľnosť, dať rozdielny štýl, nepárnym a párnym riadkom. Použitím jQuery, to možno dosiahnuť ľahko, bez akýchkoľvek dodatočných html značiek.
$("tr:odd").addClass("odd");
Ak by ste chceli spočítať, koľko div elementov sú deťmi #foo, nasledujúce riadky vám to prezradia. Jednoduché a účinné!
$("#foo > div").length
Rovnako ako miešanie HTML kódu s CSS je zlý návyk, tak isto by ste nemali používať JavaScript v HTML dokumente. Nasledujuci priklad ilustruje onclick udalost:
jQuery
Rovnaký výsledok môžme dosiahnuť ne-vnoreným JavaScript
$(document).ready(function() {
$('#homepage').click(function() {
alert('Hlavná stránka jQuery');
});
});
Na prvý pohľad sa to môže zdať zložité, obzvlášť pre začiatočníkov. No je to naozaj ľahšie ako sa zdá, a vaše HTML bude čisté.
Chceli ste už niekedy uložiť krátke informácie o prvku? Môžete to urobiť jednoducho s metódou data(). Ak chcete nastaviť hodnotu, môžete to spraviť pomocou dvoch parametrov (kľúč a hodnota) alebo len jeden (objekt).
$('#wrap').data('mojKluc', 'mojaHodnota');
$('#container').data({ mojInyKluc : 'mojaInaHodnota', rok : 2010 });
Ak chcete získať vaše dáta späť, stačí zavolať metódu s kľúčovými hodnotami, ktoré chcete.
$('#container').data('mojInyKluc'); // vrati 'mojaInaHodnota'
$('#container').data('rok'); // vrati 2010
Ak chcete získať všetky údaje, ktoré korešpondujú s prvkami, zavolajte data bez parametrov, získate objekt s všetkými kľúčmi a hodnotami, ktoré ste vložili tomuto prvku.
Ak chcete odstrániť pár kľúč/hodnota potom, čo ste to pridali do elementu, stačí zavolať removedData(), použitím správneho kľúča.
$('#container').removeData('mojInyKluc');
Ako viete, že bol obrázok správne načítaný? V niektorých konkrétnych prípadoch, ako CAPTCHA, nastávajú problémy ak sa obrázok nenačíta správne. Pomocou jednoduchého kódu, budete môcť zistiť, či sa váš obrázok zobrazil na obrazovke používateľa.
$('#mojObrazok').attr('src', 'obrazok.jpg').load(function() {
alert('Obrazok načítaný');
});
target="blank" atribút môže byť užitočný, ak chcete otvoriť odkaz v novom paneli alebo okne. Ale target="blank" atribút nie je validný XHTML 1.0 Strict. Pomocou jQuery, môžete bez problémov dosiahnuť rovnaký efekt a s validitou.
$("a[@rel~='external']").click( function() {
window.open( $(this).attr('href') );
return false;
});
jQuery('a.novaKarta').live('click', function()
{
noveOkno = window.open($(this).href);
jQuery(this).target = "_blank";
return false;
});
jQuery('a.popup').live('click', function()
{
noveOkno = window.open($(this).attr('href'),'','height=200,width=150');
if (window.focus) { noveOkno .focus(); }
return false;
});
if ($('#someDiv').length) { /* element existuje */ }
$(document).mousemove(function(e)
{
$().mousemove(function(e)
{
$(’#pozicia’).html(”X: ” + e.pageX + ” | Y” + e.pageY);
});
});
if ($.browser.safari) { /* safari */ }
if ($.browser.msie) { /* internet explorer */ }
if ($.browser.mozilla) { /* mozilla */ }
if ($.browser.opera) { /* opera */ }
if ($.browser.webkit) { /* webkit */ }
namiesto klasického
$(document).ready(function() {
//document ready
});
je možné používať taktiež
$(function(){
//document ready
});
$(document).ready(function(){
$(document).bind("contextmenu",function(e){
return false;
});
});
© 2009 Shaddow
hosting od VIPHosting