Mar 152013
 

La differenza principale tra append () e appendTo () è che la prima funziona sul target con l’html come un argomento, la seconda funziona in html con il target come argomento. La funzione append() attribuisce il contenuto alla selezione da cui è chiamata mentre l’appendTo() funziona in senso inverso: il contenuto che verrà inserito viene utilizzato come selettore. Per gli argomenti di append() e appendTo() le funzioni di aggiunta sono in grado di prendere elementi DOM HTML, stringhe, oggetti jQuery, e una funzione. Attenzione: se avete bisogno di aggiungere molti elementi HTML, è meglio unire prima il codice HTML in un più ampia stringa e aggiungerla in una singola chiamata. Lavorare con la funzione append() e appendTo() sull’albero documento html rende le manipolazioni relativamente lente.


<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>jQuery filter</title>
<script src="http://code.jquery.com/jquery-1.9.0.js"></script>
<script>
$(document).ready(function(e) {
$('#btn1').click(function() {$('#box1').append('<p>Testo 1</p>');});
$('#btn2').click(function() {$('<p>Testo 2</p>').appendTo('#box2');});


});
</script>
<style>
div{border:1px solid #000; width:200px; height:100px; padding:5px; margin:5px;}
</style>
</head>
<body>
<input type="button" id="btn1" value="btn1">
<input type="button" id="btn2" value="btn2">
<div id="box1"></div>
<div id="box2"></div>
</body>
</html>

L’esempio

Mar 012013
 

Sulla scorta dell’esempio precedente vediamo come renderlo dinamico con php e mysql.

La prima operazione sarà quindi allestire una pagina php che interroghi una tabella del database gestendo la paginazione in modo classico.


<?php
error_reporting(0);
require('include/mysql.inc.php');
$out='';
$page=1;if(isset($_GET['page'])){$page=$_GET['page'];}
$page=filter_var($page,FILTER_SANITIZE_NUMBER_INT);
$sql='select count(sigla) from province where 1';
$fetch=mysql_query($sql);
$row=mysql_fetch_row($fetch);
$totale=$row[0];
$perpage=20;
$pagine=ceil($totale/$perpage);
if($page>$pagine){$page=$pagine;}
if($page==0){$page=1;}
$primo=($page-1)*$perpage;
$sql='select sigla, nome from province where 1 order by nome limit '.$primo.','.$perpage.'';
$fetch=mysql_query($sql);
while($row=mysql_fetch_array($fetch, MYSQL_ASSOC)){
$out.='<div><h1>'.$row['sigla'].' - '.$row['nome'].'</h1></div>';
}
mysql_close($conn);
if($page<$pagine){$out.='<nav id="page-nav"><a href="lista-prov.php?page='.($page+1).'"></a></nav>';}
echo $out;
?>

I punti centrali sono il passaggio di una variabile page in GET, lettura e santize della variabile; paginazione dei record (classica); stampa del codice html da iniettare nella pagina e infine, se non siamo all’ultima pagina, aggiunta del link alla chiamata successiva.

Non resta che apportare le modifiche necessarie alla pagina di visualizzazione:

la prima questione riguarda la chiamata iniziale per presentare i dati al caricamento, via ajax, attenzione all’async:false altrimenti il nostro plugnis non riesce a fare il bind per la seconda chiamata


$(function(){
$.ajax({
url:'lista-prov.php',
type:'GET',
async:false,
success: function(str){
$('#container').html(str);
}
})

...

Il resto del codice resterà inalterato rispetto all’esempio precedente

La pagina in opera

Feb 272013
 

Un sistema oggi molto diffuso per caricare solo i dati strettamente necessari alla visualizzazione consiste nel caricare una parte dei dati al load della pagina e successivamente i dati che eventualmente saranno necessari.
Le chiamate successive possono essere associate al raggiungimento del bottom della pagina mediante scroll.
Questa soluzione verrà realizzata usando un comodo pludin di jQuery: infinite scroll
La prima questione come al solito consiste nell’importare le librerie necessarie:

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="js/jquery.infinitescroll.min.js"></script>

Successivamente prepariamo l’html che formattiamo con una riga di css:

<style>
.box{ margin:10px; padding:10px; background-color:#EEE; border:1px solid #333; border-radius:10px; box-shadow:5px 5px 5px #666666;}
</style>
...
<div id="container">
<div><h1>Box 01</h1></div>
<div><h1>Box 02</h1></div>
<div><h1>Box 03</h1></div>
<div><h1>Box 04</h1></div>
<div><h1>Box 05</h1></div>
<div><h1>Box 06</h1></div>
<div><h1>Box 07</h1></div>
<div><h1>Box 08</h1></div>
<div><h1>Box 09</h1></div>
<div><h1>Box 10</h1></div>
<nav id="page-nav"><a href="data/2.html"></a></nav>
</div>

Da notare sicuramente il tag nav, non tanto perché fa parte di html5 quanto perché è  l’elemento che contiene l’informazione sulla prossima pagina da caricare ovvero la 2.html che sarà semplicemnte affta così:

<div><h1>Box 11</h1></div>
<div><h1>Box 12</h1></div>
<div><h1>Box 13</h1></div>
<div><h1>Box 14</h1></div>
<div><h1>Box 15</h1></div>
<div><h1>Box 16</h1></div>
<div><h1>Box 17</h1></div>
<div><h1>Box 18</h1></div>
<div><h1>Box 19</h1></div>
<div><h1>Box 20</h1></div>
<nav id="page-nav"><a href="data/3.html"></a></nav>

Quindi con identica struttura html e stesso sistema per la chiamata che, ovviamente, sarà ajax.

A questo punto inseriamo lo script che gestisce la chiamata:

$(function(){
var $container = $('#container');
$container.infinitescroll({
navSelector  : '#page-nav',
nextSelector : '#page-nav a',
itemSelector : '.box',
loading: {
finishedMsg: 'No more pages to load.',
img: ''
}
});
});

La cosa fondamentale è la corretta selezione dei selettori che contengono la risorsa da caricare, il resto lo fa la libreria.

Per completezza gli attributi relativi al loading contengono le istruzioni sulla visualizzazione mentre si carica e della fine delle richieste.

L’esempio

Feb 192013
 

Questo brevissimo tutorial mostra come possiamo semplicemente mostrare un breve testo, o qualsiasi elemento html, solo quando javascript è disabilitato. Inseriamo nella nostra pagina un paragrafo con una classe per neasconderlo, la classe la chiameremo no-js, quindi al caricamento della pagina il paragrafo non sarà visibile.

<style>
.no-js{ display:none;}
</style>
<p class="no-js">javaScript abilitato</p>

Il paragrafo verrà mostrato grazie al nostro jQuery che provvederà a rimuovere la classe al caricamento, ovviamente questo non succederà nel caso in cui javaScript sia disabilitato.

$(document).ready(function(e) {
$('.no-js').removeClass('no-js');
});

L’esempio

Feb 172013
 

Questo breve esercizio ha come obiettivo quello di evidenziare una parola all’interno di un testo, selezionando fra i vari tag quello che contiene il nostro elemento target.

Partendo da questo html andremo a colorare il background della parola blue:


<div>Questo è un testo normale.</div>
<div>Questo testo contiene <i>una parola blue</i></div>
<div>Questo testo non verrà colorato</div>

Come prima cosa tramite jQuery selezioneremo il div che contiene la parola blue:


var selected = $('div:contains("blue")');

successivamente si tratterà di separare le singole parole e avvolgere in un tag span, in modo da poter poi applicare il background solo alla parola desisderata


selected.html($.map(selected.html().split(' '), function(n) {
return '<span>' + n + '</span> ';
}).join(''));

Ovvero lavorando sull’html dell’elemento selezionato, facciamo lo split usando come separatore lo spazio, su ogni elemento mettiama un tag span intorno e poi lo riuniamo al nostro codice.

questo punto il gioco è faatto poiché basta applicare la stessa soluzione che abbiamo usato per selezionare ma questa volta solo allo span e quindi applicare il css desiderato:


$('span:contains("blue")').css('background', 'blue');

L’esempio

 

Feb 132013
 

Realizzare un tooltip oggi è veramente semplice dato che questa funzionalità è stat integrata in jQuery UI, e questo, di base, ci semplifica molto il lavoro.

Ovviamente dovremo collegare jquery, jquery ui  e il tema di nostro gradimento. Dopodiché nella nostra pagina inseriremo un div appena formattato con un css semplicissimo e che conterrà nell’attributo title il testo da visualizzare nel css.


<style>
#box{ width:320px; height:240px; border:1px solid #000;}
</style>

<div id="box" title="Testo da visualizzare nel tooltip"></div>

L’attivazione della funzionalità avviene nel solito modo di jquery UI: $(selettore).metodo, ovvero, nel nostro caso, $(‘#box’).tooltip8):

ma noi arrichiremo l’esperienza aggiungendo un effetto fade di transizione e gestendo la durata:


$("#box").tooltip({ hide: { effect: "fade", duration: 1000 } });

L’esempio

Feb 112013
 

Proviamo a emulare il selttore hover del css con jQuery: nella nostra pagina inseriremo un semplice div al quale cambieremo il background all’hover per poi ripristinare lo stato di partenza.

L’html sarà semplicissimo un solo dive con un minimo css per vederlo nella pagina:


<style>
#box{ width:320px; height:240px; border:1px solid #000;}
</style>

<div id="box"></div>

Gestiamo ora l’hover sul nostro box con appunto il metodo hover(), la prima funzione servirà ad applicare lo stile dell’hover, la seconda funzione ripristinerà la situazione di partenza o in ogni caso lo stato post-hover


$('#box').hover(
function(){$(this).css({'background-color':'#F90'});},
function(){$(this).css({'background-color':'#FFF'});}
);

L’esempio