Nonostante sia ancora giovane come progetto, ho deciso di presentarvi la libreria da me realizzata, ExtendDOM.
Introduzione
Come si evince dal nome ( non sono riuscito a trovarne uno migliore ), essa permette di estendere il DOM, ovvero di creare dei metodi che vengono applicati a tutti gli oggetti del DOM automaticamente, in modo semplice, veloce e crossbrowser ( testato su Firefox 1.5+, IE6+ e Opera9 ).
Ciò accade anche per quegli oggetti creati con document.createElement ( per questo devo ringraziare il mitico Andr3a e il suo webreflection ).
Per adesso manca il supporto per quegli elementi creati con innerHTML, ma il problema riguarda solo IE.
Iniziamo da un esempio stupido: supponiamo di voler creare il metodo hide, che nasconde l'oggetto:
-codice:ExtendDOM("hide", function() { this.style.display="none"; });
Ovviamente il riferimento all'oggetto va fatto con l'operatore this.
Successivamente potremo usare il metodo con qualsiasi oggetto del DOM:
Gia nel file extendDOM.js è presente un metodo, addToEvent. Essa fa da attachEvent per IE e da addEventListener per i browser del w3c.codice:window.onload=function() { document.getElementById("myelem").hide(); }
Tutto qui?
No. ExtendDOM è anche il core di una libreria modulare, ovvero composta da vari moduli che sono indipendenti tra di loro, ma che per funzionare necessitano appunto del core.
Per adesso sono presenti 3 moduli, presto ne aggiungerò altri:
1)megutility ( richiesteAjax )
2)megacolous ( effetti grafici )
3)easyDOM ( getter e setter )
Mi limiterò a descriverli velocemente ( altrimenti la discussione diventa troppo pesante ), maggiori dettagli sono nella documentazione
megutility
Megutility si occupa delle richieste asincrone ( ajax ). Onestamente, almeno per adesso, non ha nulla in più rispetto alle funzioni presenti sul web. Presto però verranno aggiunte nuove funzionalità.
Il metodo della megutility è innerAJAX:
Di default la richiesta è di tipo get ( lo so che ciò va controcorrente ). Maggiori dettagli li trovate nella documentazione.codice:document.getElementById("myelem").innerAJAX("myUrl.php", funzione);
Funzione è una funzione che viene eseguita dopo che la richiesta ha successo. E' incluso un preloader, di cui bisogna andare a cambiare il path manualmente.
magacolous
Scommetto che il nome vi ricorda qualcosa... che Thomas Fuchs mi perdoni![]()
come già ribadito, è la parte grafica della libreria. Ancora ha parecchi difetti, comunque è molto leggera e dispone almeno degli effetti più basilari.
Permette di:
-rendere draggabile degli elementi;
-realizzare effetti fade ( transizione di opacità )
-muovere degli elementi
-cambiare le dimensioni di un elemento
E in studio un effetto resize.
Esiste anche una funzione effects, ma è tanto poco efficiente che evito di documentarla.
Piuttosto partiamo con gli esempi:
Essendo questo un esempio faccio partire tutti gli effetti contemporaneamente, inutile dire che non è consigliabile.codice:el=document.getElementById("myEl"); el.drag(funzione_al_mouseDown, funzione_al_mouseUp); el.fade(0, 100, 10, 5); el.scale(200, 200, 5, 5, 10); el.move(700, -200, 5, -5, 10);
EasyDOM
Contiene alcuni metodi per settare e prendere elementi, in modo da facilitare l'interazione col DOM.
Per adesso ha quattro metodi:
1)getElementsByAttribute(attributo, valore, tags, flagIndexOf)
2)get_(byWhat, argomenti)
3)setAttributes(attributi)
4)setArrayProperty - per problemi di compatibilità con IE, setArrayProperty è una semplce funzione, non un metodo.
1)getElementsByAttribute permette di prendere tutti gli elementi da un attributo, anche dalla classe o dagli eventi ad esso associati. Se si desidera che il valore possa essere qualsiasi, inserire "*" al posto di valore.
Stesso discorso per l'argomento tag.
L'ultimo argomento è di default settato a false ( apparte che con gli attributi evento ). Se settato a true, il confronto viene fatto per indexOf, meglio fare un esempio:
Nel secondo caso, essendo il flagIndexOf true, gli elementi verranno presi anche se il valore del corrispondente attributo contiene altri caratteri oltre a quelli dichiarati. e' meglio settarlo sempre a false se non è necessario.codice:myElements=new Array(); myElements=document.getElementsByAttribute("class", "miaClasse", "*"); myElemenys=document.getElementsByAttribute("class", "miaC", "*", 1);
2)get_ è semplicemente una forma abbreviata per prendere elementi, dall'id, dal tag o dall'attributo.
Davanti al primo get si può anche mettere document o un qualsiasi altro oggetto, ma per semplicità, nella maggior parte dei casi può essere omesso.codice:get_("id", "myEl").get_("tag", "div")[0].get_("at", "title", "prendimi se ci riesci!", "*")[0].style.color="red";
3)setAttributes, lo dice a parola stessa, setta più attributi in un colpo solo, anche la classe e gli eventi ( i valori di questi non vanno tra virgolette )
esempio:
4)setArrayProperty permette di settare una proprietà ( ma anche di richiamare un metodo ) di ogni elemento di un array.codice:get_("id", "myEl").setAttributes({ title:"nuovo titolo", class:"nuova_classe", onclick:function() { alert(this.title); } })
esempio per le proprietà:
esempio per i metodi ():codice:setArrayProperty(myArray, "title", "nuovo titolo");
come detto precedentemente, setArrayAttribute non è un metodo ma una semplice funzione.codice:setArrayProperty(myArray, "setAttribute('title', 'nuovo titolo')");
ExtendDOM e le altre librerie
ExtendDOM è un progetto ancora molto ma molto giovane e di certo non è al livello di strumenti quali jquery, prototype o mootools.
Chi già utilizza queste librerie non avrà molto interesse a migrare verso ExtendDOM...
In realtà esiste un punto d'incontro: attraverso ExtendDOM, le funzioni di queste librerie possono essere trasformate in metodi, in modo da semplificare di molto il codice e renderlo più omogeneo.
Ciò diventa un grosso vantaggio per librerie quali prototype, poichè sarebbe possibile evitare di dover ogni volta specificare Element.extend.
Esistono termini per l'uso di ExtendDOM e dei suoi moduli?
Solo uno: lasciare inalterati i commenti.
Links
Scarica ExtendDOM
Documentazione
L'intro della libreria ( interamente in javascript )
Sono ben accetti commenti, critiche e suggerimenti.

Rispondi quotando


)
cioè in che senso? Mi cancella i metodi da me creati anche se non hanno lo stesso nome?
