function oElement( oNode ){ this.id = oNode; this.element = function(){ var theElement = document.getElementById( oNode ) return theElement; } }
i dette eks, ønsker jeg at hente/deklarere et objekt der allerede eksistere i dokumentet. var nodeA = new oElement('nodeAFraHTML')
hvis jeg nu ville teste på om objektet nu eksisterer, vil jeg kunne skrive noget i retning af: if (nodeA.element){alert(nodeA.element)}, og hvis det eksisterer vil jeg vel få en alert med [object].
men jeg får en alert med funktionen skrevt ud i.
Hvordan gøre jeg dette, er det overhovedet en fornuftig måde at gøre tingene på
nope, men kan du se ideen, ved at deklarere elementet og igennem objektet hente al nødvendig info (crossbrowser) der kunne jo endvidere optræde properties som .style .parentNode etc.
Ideen er at skabe et lag som er en fællesnævner til methods og properties på kryds af browserer
Jeg checker her kun for ns4 mod alle andre - det bør naturligvis udvides (Opera kan f.eks. heller ikke læse innerHTML). Dette var kun et eksempel. Vær endvidere opmærksom på, du skal sætte styles på elementet (som inline styles - _ikke_ en class) for at kunne aftaste værdierne. Det har dog ikke noget med OOP at gøre ... det er generelt gældende. Jeg har ikke testet eksemplet op mod NS4.X - men det burde virke.
Læg mærke til to ting: 1. I det første eksempel deklarede jeg variablen 'nodaA' inde i funktionen på onload-eventen. Det gør, den kun kan 'ses' indefra denne funktion (= temmelig ubrugeligt). Det er rettet i dette eksempel.
2. Check bredden før og efter, du har tykket på linket, der ændrer bredden. Før et tryk på linket får du 'px' efter tallet ... det gør du ikke efter et tryk. Det hænger sammen med, om du skriver 'px' i henholdsvis din inline-styles (og det bør du!) og i kaldet i linket, der kalder objektets metode. Man kan blive nødt til at bruge noget parseInt() i visse tilfælde - alt efter, hvordan du påtænker at anvende tallene.
dr_nielsen >> Det ville være synd at spilde pointene på mig, da jeg ikke bruger Eksperten mere. Du har sikkert mere brug for dem selv - men tusind tak ;o)
På falderebet vil jeg lige forklare dig en enkelt ting, jeg kan huske, drillede mig, da jeg selv begyndte på OOP (det kunne måske også være til hjælp for andre, der måtte dumpe ned her, senere). Det drejer sig om, hvorfor denne funktion ser ud, som den gør:
function fnSetWidth(w) { this.css.width = w; this.w = w; }
...og ikke bare:
function fnSetWidth(w) { this.w = w; }
Årsagen er, at 'OBJEKT.w' refererer til den bredde, objektet har i instantierings øjeblikket (det tidspunkt, du opretter dit objekt). At ændre denne værdi, ændrer ikke på bredden af det HTML-element, der repræsenteres ved objektet - du ændrer altså kun property'en 'w' på objektet.
For at ændre på bredden, må du tage fat i HTML-elementets style-property (eller dets style-objekt, om du vil. Et HTML-elements style-property har jo form som et objekt med properties som 'width', 'height', 'color', osv). Denne property repræsenteres ved 'OBJEKT.css' ... derfor linien 'this.css.width = w;'. Men da 'OBJEKT.w' jo stadig refererer til bredden i instantierings øjeblikket, sættes 'OBJEKT.w' ligeledes til den nye bredde-værdi.
Disse forhold gør sig også gældende, hvis du opretter properties for f.eks. left og top.
En aller sidste ting skal være en lille 'advarsel': For en mand med en fin, ny hammer kommer alt til at ligne søm ;o)
Når man begynder at gøre sin kode objektorienteret, gør man sig ofte skyldig i overkill (jeg taler af egen erfaring). Et enkelt element bør du ikke oprette et objekt til - men hvis du har nogle stykker, du skal manipulere, kan det være en voldsom fordel. Her kan man med fordel gøre således:
// opret et array med id'er på dine divs var myDivs = new Array( "ib", "gudrun", "karl", "kathinka" );
for ( i=0; i<myDivs.length; i++ ) { myDivs[i] = new oElement( myDivs[i] ); }
Nu indeholder array'et myDivs ikke længere id'er, men objekter, som refererer til de pågældende divs. Objektet med id'en 'karl' kan altså herefter kaldes med myDivs[2] - og man kan ændre på alle eller udvalgte objekter ved at tælle dem igennem med en for-løkke, hvis det skulle være interessant :)
Ja men der er endnu ikke nogle svar, og så havde jeg lidt på fornemmeren at du ville melde en kommentar ind under solen :)
Smid et svar så jeg ikke skal tage dem retur
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.