07. marts 2007 - 10:21Der 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.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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 !-)
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]); } }
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.
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)
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!
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.