Avatar billede sluppermanden Nybegynder
07. marts 2007 - 10:21 Der er 10 kommentarer og
1 løsning

Kan man kopier et object.

Hej,

Jeg har en side hvor den samme dropdown box optræder rigtig mange steder.
Det tage ret lang tid at overfører siden. Da der dannes enormt meget kode.
Jeg har nu lavet siden om så alle dropdowns bliver fyldt ud med javascript nå siden loader.

Men det tager også langtid på klienten 3-4 sekunder.
Problemet er at javascriptet hele tiden lave new Option.

Er der en mulighed for at kopiere hele dropdown boxen til en ny?
Så man bare kan loope over alle dropdowns.

// pft
Avatar billede roenving Novice
07. marts 2007 - 10:41 #1
Kein problem:

var sel = document.getElementById("select1");
//udfyld den første, bare som eksempel
for(i=0,im=opts.length;im>i;i++){
  sel.options[sel.length] = new Option(opts[i].text,opts[i].value);
}
var sel2 = sel.cloneNode(true);
sel2.setAttribute("name","select2");
var nyPlads = document.getElementById("pladsTilSel2");
nyPlads.appendChild(sel2);

-- men hvor meget du vinder tør jeg ikke udtale mig om !-)
Avatar billede sluppermanden Nybegynder
07. marts 2007 - 11:24 #2
Hej roenving,

Tak for svaret, jeg sidder lige og tester det.
Koden løber fint igennem men jeg får ikke skiftet dropdown'en ud.

Kan du ikke lige forklare de sidste 2 linier.

Mvh Rasmus
Avatar billede roenving Novice
07. marts 2007 - 11:53 #3
Skal du udskifte selects, der findes i forvejen, så skal du også have fat i dem !-)

-- og det, jeg har lavet i de to sidste linjer, er at finde det element, klonen skal være inde i, og derefter indsætte den nye select i det element ...

-- men f.eks.

var sel = document.getElementById("select1");
//udfyld den første, bare som eksempel
for(i=0,im=opts.length;im>i;i++){
  sel.options[sel.length] = new Option(opts[i].text,opts[i].value);
}
var sels = document.getElementsByTagName("select"),sel2;
for(i=0,im=sels.length;im>i;i++){
  if(sels[i] != sel && sels[i].className == "replace"){//bare et eksempel på hvordan du kan identificere udskiftelige
    sel2 = sel.cloneNode(true);
    sel2.setAttribute("name", sels[i].getAttribute("name"));//hvis navne skal være forskellige
    sels[i].parentNode.replaceChild(sel2,sels[i]);
  }
}
Avatar billede sluppermanden Nybegynder
07. marts 2007 - 12:57 #4
Hej roenving,

Tak for forklaringen. Det virker nu.
Det er en del hurtigere at gøre på denne måde, måske faktor 4-5 stykker.

Jeg har valgt ikke at bruge denne funktionalitet da skærmen blinker under operationen.

Ja har valgt at fylde dropdownen ud på mouseOver og onFocus event. Hvor efter dropdownen bliver fyldt ud og events'ne cleared.
Det ser ikke så pænt ud, men tilgengæld går det hurtigt.

Du må ligge et svar så er der point.
Avatar billede roenving Novice
07. marts 2007 - 13:01 #5
Oki '-)
Avatar billede sluppermanden Nybegynder
07. marts 2007 - 13:48 #6
Meget cool eksperiment. :)
Avatar billede roenving Novice
07. marts 2007 - 13:53 #7
Tak for point ;~}
Avatar billede olebole Juniormester
07. marts 2007 - 14:34 #8
<ole>

Det er ikke godt at have event-handlers knyttet til DOM-elementer, der indsættes, før de er blevet indsat.
Gør man det, opretter IE nemlig et midlertidigt, lokalt scope, som IE's garbage-collection ikke kan finde/fjerne ... hvilket resulterer i memory-leaks.

Event-handlers bør først knyttes til elementer, når elementet er appended til DOM'en  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
07. marts 2007 - 14:35 #9
Rigtig skidt dansk i første linje ... håber, meningen sev igennem, alligevel  ;oD
Avatar billede roenving Novice
07. marts 2007 - 14:49 #10
-- er det det, du har nørdet og nørklet med på dets seneste ?-)

Tak for oplysningen, men det har jo nogle kraftige konsekvenser for den måde, man skal opbygge sine templates !-)
Avatar billede olebole Juniormester
07. marts 2007 - 14:56 #11
Jeg kan jo ikke rende rundt i evigheder og tro, jeg stadig er teenager. I min alder bør man vel opføre sig, somom man har alderen til at være voksen og dermed at interessere sig nærmere for memory-leaking, så ja - det har optaget mig en del på det seneste  ;oD

- og jeg er blevet en hel del klogere - ikke mindst på IE's Alzheimers!
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester