Lezione 4
Con l'avvento del web 2.0 nel 2008, ci fu la necessità di avere strumenti per interagire con le pagine web in modo più intelligente e agile.
Nacquero così diverse librerie JS per lo sviluppo veloce di applicativi 2.0.
La differenza tra una libreria e un framework, è che la libreria generalmente si occupa di un singolo aspetto dell'applicativo, mentre un framework si occupa di vari aspetti una web app.
Alcune delle prime librerie create furono MooTools / Prototype e poi arrivò jQuery.
jQuery è una libreria che permette la manipolazione dell'HTML, dello stile grafico (CSS), permette di fare animazioni, chiamate AJAX e molto altro.
Il suo successo è dato dalla semplicità con cui permette di interagire con l'HTML.
Tutto il mondo di jQuery ruota intorno all'oggetto $; ossia un alias per la libreria jQuery.
// Vanilla JS / standard
document.getElementById('mioId').href;
// jQuery
$('#mioId').attr('href');
PRO:
CONTRO:
Dal sito jquery.com è possibile scaricare jQuery in modalità:
development
quindi il codice non è compresso, molto utile in fase di sviluppo e debug
production
il codice è compresso, molto utile quando si va online
Una volta scaricato il file, si andrà ad aggiungere nel nostro file HTML come un normale file JS; ma prima del file in cui vogliamo usare jQuery
[...]
<script src="jquery-3.4.1.min.js"></script>
<script src="main.js"></script>
</body>
</html>
Con jQuery possiamo operare con il DOM nel seguente modo:
let el = $('#mioID');
let elements = $('.miaClasse');
let elemento = $('<div></div>');
let window = $(window);
el.append(elemento);
el.addClass('miaClasse');
el.removeClass('miaClasse');
$('#mioID'); // SELEZIONE PER ID
$('.miaClasse'); // SELEZIONE PER CLASSE
$('a'); // SELEZIONE PER TAG
Selettori di base
// SELEZIONA TUTTI I LINK DENTRO ALL'ELEMENTO CON CLASSE miaClasse
$('.miaClasse a');
// SELEZIONA TUTTI I LI DENTRO ALL'ELEMENTO CON
// UL DIRETTAMENTE DISCENDENTI, NON I "SOTTO FIGLI"
$('ul > li');
Selettore parent child (spazio e discendente)
// SELEZIONA TUTTI GLI SPAN DIRETTAMENTE VICINI AD UN DIV
$('div + span')
<div>Questo</div><span>Sì</span>
<div>Questo</div><img /><span>No</span>
// SELEZIONA TUTTI GLI SPAN FRATELLI MA ANCHE NON DIRETTAMENTE ADIACENTI
$('div ~ span')
<div>Questo</div><span>Sì</span>
<div>Questo</div><img /><span>Anche</span>
Selettore adiacenza ( + e tilde)
$("a[target='_blank']"); // SELEZIONA TUTTI I LINK CHE SI APRONO IN NUOVE FINESTRE
$("a[title^='nuova']"); // SELEZIONA I LINK CON TITOLO CHE INIZIA PER "nuova"
$("a[title$='pagina']"); // SELEZIONA I LINK CON TITOLO CHE FINISCONO PER "pagina"
Selettori per attributi
$("#menu li:first-child"); // SELEZIONA TUTTI IL PRIMO LI NEL MENU
$("#menu li:last-child"); // SELEZIONA TUTTI L'ULTIMO LI NEL MENU
$("#menu li:even"); // SELEZIONA TUTTI I LI PARI
$("#menu li:odd"); // SELEZIONA TUTTI I LI DISPARI
$("#menu li:eq(3)"); // SELEZIONA IL TERZO LI NEL MENU
Filtri sui selettori
$("div").find('a'); // SELEZIONA TUTTI I LINK DENTRO AI DIV
$("li").parent(); // SELEZIONA L'ELEMENTO PADRE DIRETTO
$("li").closest('div'); // SELEZIONA IL DIV PARENTE PIU' PROSSIMO
$("li").next(); // SELEZIONA L'ELEMENTO SUCCESSIVO
$("li").prev(); // SELEZIONA L'ELEMENTO PRECEDENTE
Ricerca e utility
$("#menu li").length; // RESTITUISCE IL NUMERO DI LI
$("#menu li").each(function () {
let id = this.id;
});
// RESTITUISCE L'ATTRIBUTO HREF
$("a#mioLink").attr("href");
// IMPOSTA L'ATTRIBUTO HREF SUL ELEMENTO CON ID mioLink
$("a#mioLink").attr("href", "http://www.google.com");
// RIMUOVERE UN ATTRIBUTO DA UN ELEMENTO HTML
$("#menu li a").removeAttr("target");
// METODO DI CONTROLLO CHE RITORNA TRUE SE L'ELEMENTO HA UNA SPECIFICA CLASSE
$("a").hasClass('miaClasse');
// AGGIUNGI UNA CLASSE
$("a").addClass('miaClasse');
// RIMUOVI UNA CLASSE
$("a").removeClass('miaClasse');
// AGGIUNGE UNA CLASSE SE NON PRESENTE, ALTRIMENTI LA TOGLIE
$("a").toggleClass('miaClasse');
<p>testo del <strong>paragrafo</strong></p>
// TEXT RESTITUISCE SOLO IL TESTO, GIà LAVORATO
$("p").text(); // "testo del paragrafo"
// HTML RESTITUISCE IL CONTENUTO IN FORMATO HTML
$("p").html(); // "testo del <strong>paragrafo</strong>"
// INSERISCE UN NUOVO TESTO NEL PARAGRAFO
$("p").text("Nuovo testo");
// INSERISCE UN NUOVO HTML NEL PARAGRAFO
$("p").html("Nuovo testo con <strong>HTML</strong>");
$("a").css("color"); //restituisce il colore esadecimale del primo elemento link
$("a").css("color","#FF0000"); //imposta il colore dei link
$("a").css({
"color" : "#FF0000", //imposta il colore
"display" : "block" // imposta la visualizzazione
});
// RESTITUISCE LA LARGHEZZA IN PIXEL
$("a").width();
// RESTITUISCE L'ALTEZZA' IN PIXEL
$("a").height();
// RESTITUISCE LA LARGHEZZA IN PIXEL, INCLUSO IL PADDING
// MA NON IL BORDO E IL MARGINE
$("a").innerWidth();
// RESTITUISCE L'ALTEZZA' IN PIXEL, INCLUSO IL PADDING
// MA NON IL BORDO E IL MARGINE
$("a").innerHeight();
// RESTITUISCE LA LARGHEZZA IN PIXEL, INCLUSO IL PADDING
// E IL BORDO MA NON IL MARGINE
$("a").outerWidth();
// RESTITUISCE L'ALTEZZA' IN PIXEL, INCLUSO IL PADDING
// E IL BORDO MA NON IL MARGINE
$("a").outerHeight();
// RITORNA UN OGGETTO CON LA DISTANZA DA SINISTRA E
// DALL'ALTO DELL'ELEMENTO RISPETTO AL DOCUMENTO
$("a").offset();
// COME OFFSET; MA LE DISTANZE SONO RELATIVE AL CONTENITORE
$("a").position();
// TROVA O IMPOSTA SCROLL DELL'ELEMENTO RISPETTO AL DOCUMENTO
$("a").scrollTop();
$("a").scrollLeft();
let el = document.getElementById('mioID');
el.addEventListener('click', () => {
alert('CIAO!');
});
$('#mioID').on('click', () => {
alert('CIAO!');
});
$(document).ready( function() {
alert('DOM CARICATO');
});
// MOSTRA IL BLOCCO SE NASCOSTO
$('.blocco').show();
// MOSTRA IL BLOCCO SE NASCOSTO, MA CON UN ANIMAZIONE PIU' LENTA
$('.blocco').show('slow');
// NASCONDI IL BLOCCO SE NASCOSTO
$('.blocco').hide();
// NASCONDI IL BLOCCO SE NASCOSTO, MA CON UN ANIMAZIONE PIU' LENTA
$('.blocco').hide('slow');
// NASCONDE/MOSTRA UN ELEMENTO CON UN ANIMAZIONE SULL'ALTEZZA
$('.blocco').slideToggle();
// MOSTRA UN ELEMENTO LAVORANDO SULL'OPACITA'
$('.blocco').fadeIn();
// NASCONDI UN ELEMENTO LAVORANDO SULL'OPACITA'
$('.blocco').fadeOut();
// ANIMATE PERMETTE DI APPLICARE UNA SERIE DI PROPRIETA' CSS
// DECIDENDO IL TIMING ED AVENDO LA POSSIBILITà DI
// ESEGUIRE UNA CALLBACK ALLA FINE DELL'ANIMAZIONE
$("#box").animate({
"borderWidth" : "4px", //bordo a 4 pixel
"width" : "+=20px" //aumenta la larghezza di 20 pixel
},
"slow", //animazione lenta
"linear", //andamento lineare
function () {
//funzione di callback
alert("Animazione conclusa!");
}
);
// AJAX E' UNA FUNZIONE CHE CI PERMETTE DI EFFETTUARE
// CHIAMATE XHR IN MODO MOLTO SEMPLICE
$.ajax({
url : 'dati.php',
data : {
limit: 10,
offset: 0
},
complete: function (righe, stato) {
for (i=0; i < righe.length; i++) {
let riga = righe[i];
$("<tr/>")
.append("<td>" + riga.colonna1 + "</td><td>" + riga.colonna2 + "</td>")
.appendTo("#tabella");
}
}
});