Avatar billede jesper-moeller Nybegynder
09. august 2006 - 22:42 Der er 25 kommentarer og
2 løsninger

hjælp til optimering af link script

Har dette lille script til at fjerne "focus" boxen omkring link

function Fjernbox() {
    var aA = document.getElementsByTagName("a");
    for (var i=0,j=aA.length;i<j;i++) aA[i].onfocus = function(){this.blur()};
}

Men det hjælper ikke på image area, så har tilføjet lidt til det

function Fjernbox() {
    var aA = document.getElementsByTagName("a");
    for (var i=0,j=aA.length;i<j;i++) aA[i].onfocus = function(){this.blur()};
    var aAr = document.getElementsByTagName("area");
    for (var i=0,j=aAr.length;i<j;i++) aAr[i].onfocus = function(){this.blur()};
}

Det funger udemærket. men tæknte om ikke de kunne gøres lidt simplere ? altså bygge de to funktioner sammen feks :
    var aA = document.getElementsByTagName("a")||document.getElementsByTagName("area");
eller noget i den stil ????

Håber det giver mening !
Avatar billede thesurfer Nybegynder
09. august 2006 - 23:55 #1
Hmm.. det kan jeg ikke lige se, da det er 2 forskellige samlinger..

Men en anden ting:
Hvorfor står der "j=aAr.length", når du kun bruger "j" et sted?

Så kan du lige så gøre sådan her: for (var i=0; i < aAr.length ; i++)

Jeg synes ikke at det andet kan betale sig, med mindre at du skal bruge længden andre steder, hvor den så ikke skal til at regne værdien ud..
Avatar billede thesurfer Nybegynder
09. august 2006 - 23:57 #2
Jeg ved ikke om det virker, men du kunne prøve med:

var aA = document.getElementsByTagName("a") + document.getElementsByTagName("area");
Avatar billede jesper-moeller Nybegynder
10. august 2006 - 00:13 #3
thesufer
"Så kan du lige så gøre sådan her: for (var i=0; i < aAr.length ; i++)"
Den havde jeg ikke lige tænkt på :-) (er et gammelt script jeg ikke har leget med længe)

vil prøve dit forslag mht +
Avatar billede mclemens Nybegynder
10. august 2006 - 00:21 #4
Hvad med:

<script type="text/javascript">
function Fjernbox() {
  for(i=0;aA=document.getElementsByTagName("a")[i];i++)aA.onfocus = function(){this.blur()};
  for(i=0;aAr=document.getElementsByTagName("area")[i];i++)aAr.onfocus = function(){this.blur()};
}
</script>
Avatar billede mclemens Nybegynder
10. august 2006 - 00:22 #5
Hov, thesurfer ser 100
gange mere smart ud...
Den må jeg lige prøve :D
Avatar billede mclemens Nybegynder
10. august 2006 - 00:29 #6
Hmmm, kunne ikke gennemskue den :/
- en rettelse til mit forslag:

function Fjernbox() {
aA=["a","area"];for(i=0;i<aA.length;i++)for(j=0;aAr=document.getElementsByTagName(aA[i])[j];j++)aAr.onfocus=function(){this.blur()};
}
Avatar billede mclemens Nybegynder
10. august 2006 - 00:34 #7
Her er lige thesurfers
eksempel (&& istedet for + ) :


<script type="text/javascript">
function Fjernbox() {
  var aA = document.getElementsByTagName("a")&&document.getElementsByTagName("area");
  for (i=0; i < aA.length ; i++)aA[i].onfocus = function(){this.blur()};
}
</script>
Avatar billede mclemens Nybegynder
10. august 2006 - 00:35 #8
[ Hmmm, kunne ikke gennemskue den :/ ]
... Det hjælper altid når man bliver stædig :D
Avatar billede mclemens Nybegynder
10. august 2006 - 00:48 #9
Mere stædighed er altid godt :P

<script type="text/javascript">
function Fjernbox() {
  aA=document.getElementsByTagName(("a")&&("area"));
  for (i=0;i<aA.length;i++)aA[i].onfocus=function(){this.blur()};
}
</script>
Avatar billede mclemens Nybegynder
10. august 2006 - 00:49 #10
Nåh, så er det vist sovetid ...
Den kan vist ikke forkortes mere :/
(udover aA til a)
Avatar billede jesper-moeller Nybegynder
10. august 2006 - 00:57 #11
I er nu rå ...*S*

Her kommer lidt af dommen

function Fjernbox() {
  var aA = document.getElementsByTagName("a")&&document.getElementsByTagName("area");
  for (i=0; i < aA.length ; i++)aA[i].onfocus = function(){this.blur()};
}

og

function Fjernbox() {
  aA=document.getElementsByTagName(("a")&&("area"));
  for (i=0;i<aA.length;i++)aA[i].onfocus=function(){this.blur()};
}

virker ikke på "a"
(eller omvendt hvis jeg bytter rundt på  "a"  og "area")

Til gændgæld ser:
    var aA=["a","area"];for(i=0;i<aA.length;i++)for(j=0;aAr=document.getElementsByTagName(aA[i])[j];j++)aAr.onfocus=function(){this.blur()};
ud til at virke

;-)

Håber i begge smider et svar
Avatar billede mclemens Nybegynder
10. august 2006 - 00:57 #12
Kunne ikke lade være for() forkortet
og parenteser i getElementsByTagName()
- samt aA til a ... I kender mig
jo når jeg først spammer løs :o)


<script type="text/javascript">
function Fjernbox() {
  a=document.getElementsByTagName("a"&&"area");
  for(i in a)a[i].onfocus=function(){this.blur()};
}
</script>
Avatar billede mclemens Nybegynder
10. august 2006 - 00:58 #13
Update, ok :o)
Avatar billede mclemens Nybegynder
10. august 2006 - 00:58 #14
*lol*
Avatar billede mclemens Nybegynder
10. august 2006 - 01:06 #15
En anden så

<script type="text/javascript">
function Fjernbox() {
  a=["a","area"];
  for(i in a){b=document.getElementsByTagName(a[i]);
  for(j in b)b[j].onfocus=function(){this.blur()};}
}
</script>
Avatar billede thesurfer Nybegynder
10. august 2006 - 01:08 #16
Hvis man ser bort fra "j=aAr.length", er koden i dit spørgsmål fint og simpelt.. :-)

Her er et svar :-)
Avatar billede jesper-moeller Nybegynder
10. august 2006 - 01:13 #17
I får lige 25 hver ;-)

tester lige mclemens sidste forsøg *G*
om ikke andet har jeg da en brugbar løsning ...*S*
Avatar billede thesurfer Nybegynder
10. august 2006 - 01:14 #18
Takker for points :-)

Godnat og sov godt.
Avatar billede mclemens Nybegynder
10. august 2006 - 01:18 #19
Tak for point også :o)
En sov godt herfra også.
Avatar billede jesper-moeller Nybegynder
10. august 2006 - 01:19 #20
mclemens sidste virker også
så blot et spørgsmål om vilken der er smartest

function Fjernbox() {
  a=["a","area"];
  for(i in a){b=document.getElementsByTagName(a[i]);
  for(j in b)b[j].onfocus=function(){this.blur()};}
}

eller

function Fjernbox() {
    var aA=["a","area"];for(i=0;i<aA.length;i++)for(j=0;aAr=document.getElementsByTagName(aA[i])[j];j++)aAr.onfocus=function(){this.blur()};
}

;-)
Avatar billede mclemens Nybegynder
10. august 2006 - 01:26 #21
Jeg ville tage den sidste ( 10/08-2006 01:06:44 ) jeg foretrækker at jeg tildeler en forbindelse til alle elementer og gennemløber elementerne fra et array som i den udgave.

Den jeg lavede først var før jeg fik den i svingninger og tænkte
på gennemløb af tildelingen og gennemløbet af elementerne
analyserer lige den jeg ikke kan lide...

  var aA=["a","area"]; // Ens for begge

for(i=0;i<aA.length;i++) // For både a og area laves et gennemløb - næsten "ens" også

for(j=0;aAr=document.getElementsByTagName(aA[i])[j];j++) /* Der foretages et gennemløb af elementerne i a og area og hver gang et element behandles spørges på true/false for at checke om løkken skal løbe videre. aAr tildeles en ny værdi for hvert eneste gennemløb. Det er denne her med at man ikke gennemløber et fast antal elementer man lader den prøve sig frem hovedløs jeg ikke kunne lide. Jeg vil klart anbefale den i 10/08-2006 01:06:44. Den fylder mindre og er mindst lige så effektiv - eller rettere tror egentlig den er en del mere effektiv (har dog ikke testet hastighed og ressourcer). */

  aAr.onfocus=function(){this.blur()};
}
Avatar billede mclemens Nybegynder
10. august 2006 - 01:28 #22
... Den jeg lavede først var før jeg fik (Edit: den -> tænkeren i omdrejninger) ...
Avatar billede mclemens Nybegynder
10. august 2006 - 01:35 #23
Vi tager lige den anden nu jeg spammer
Den er jo meget mere simpel end den første...
- Kan specielt godt lide måden at loope igennem elementerne
og det med ikke at skulle fange hvert element oppe fra dom
(document. ...) hver gang man skal rette på elementet

- men om det er hurtigere ved jeg selvfølgelig ikke helt...
- men jeg tror ikke at det er langsommere...

function Fjernbox() {
  a=["a","area"]; // Array med text strenge
  for(i in a){ // Gennemløb af text strenge i array'et
    b=document.getElementsByTagName(a[i]); // Tildeler b et array af objecter baseret på ovenstående gennemløb af text strenge
    for(j in b)b[j].onfocus=function(){this.blur()}; // Gennemløber b array'et for objecter og tildeler hvert object en onfocus
  }
}
Avatar billede jesper-moeller Nybegynder
10. august 2006 - 01:38 #24
*S*... tog også den sidste ... ud fra betragtningen... den fyldte mindre .*GGG*

(Og lidt mere overskuelig) ...
*G*

Nu køre det hvertfald

Bare vent til jeg kommer med en af de rigtig slemme... *S*
Avatar billede roenving Novice
10. august 2006 - 16:33 #25
-- og lige en kommentar til strandløvens første spørgsmål:

"
Hvorfor står der "j=aAr.length", når du kun bruger "j" et sted?
"

Det er faktisk en god teknik, for j bruges ved hvert eneste gennemløb i løkken, hvor betingelsen jo netop checkes for at se om der skal loopes yderligere, så den er specielt ressourcebesparende specielt med store arrays, da man så undgår, at der for hvert gennemløb skal beregnes, hvor langt det pågældende array af elementer er !-)
Avatar billede jesper-moeller Nybegynder
10. august 2006 - 17:40 #26
Nemlig roenving ... *G*... defor jeg brugte det ...*G*
(Rart nogen hved hvorfor jeg gør som jeg gør)

;-)
Avatar billede thesurfer Nybegynder
10. august 2006 - 18:15 #27
roenving> Det vidste jeg godt.. Jeg ville bare teste jer.. tænk at det tog så lang tid, for at en af jer sagde noget.. :-)

(vidste det faktisk godt, men havde glemt det)
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