27. marts 2003 - 20:22Der er
9 kommentarer og 1 løsning
Begrænse script til div-tag
Jeg bruger nedenstående til at bestemme om links skal åbnes i '_self', '_blank' eller 'onewin'. Brugeren kan i sin profil selv bestemme hvad han/hun foretrækker.
****************************************************** function targetLinks(userdef) { if (userdef) where = userdef; else where = "_self"; for (var i=0; i<=(document.links.length-1); i++) { document.links[i].target = where;} } ****************************************************** Scriptet virker egentlig fint nok, bortset fra at det kun er links på en bestemt del af siden det skal gælde. Strukturen er lavet som nedenstående: ****************************************************** <body onload="targetLinks('<%=session("wind")%>');">
<div id=secondleft> </div> </body> ****************************************************** Det skal altså kun gælde for de links der er i det div-tag der hedder id=cont.
Det kunne jeg nu ikke få til at virke, men måske jeg ikke gør det rigtigt?
function targetLinks(userdef) { var divLinks = document.getElementById("firstleft").getElementsByTagName("A"); if (userdef) where = "_self"; else where = "_self"; for (var i=0; i<=(divLinks.links.length-1); i++) { divLinks.links[i].target = where;} }
Error msg.-->"links.length er null eller ikke et objekt"
Jeg fik det til at virke. Men jeg må indrømme at jeg ikke helt forstår logikken i det. Ifølge DOM burde nogle af de _mange_ andre løsninger jeg prøvede vist egentlig også virke. Anyways nu virker det, tak for hjælpen.
Løsning: **************************************************** function targetLinks(userdef) { var divLinks = document.getElementById("firstleft").getElementsByTagName("A"); if (userdef) where = userdef; else where = "_self"; for (var i=0; i<=(divLinks.length-1); i++) { divLinks[i].target = where;} }
Denne del finder div'et og laver en reference til det: var divLinks = document.getElementById("firstleft");
Her laver vi et array af de links, der ligger i div'et - og ændrer divLinks indhold til dette array: divLinks = divLinks.getElementsByTagName("A");
De er blot skrevet sammen til denne linie: var divLinks = document.getElementById("firstleft").getElementsByTagName("A");
For-løkken kunne måske skrives lidt mere 'sexy': for (var i=0; i<divLinks.length; i++) { divLinks[i].target = (userdef)? userdef : "_self"; }
Hvor linien: divLinks[i].target = (userdef)? userdef : "_self"; er en short-hand version af din if-else sætning
Det giver tilsammen funktionen: function targetLinks(userdef) { var divLinks = document.getElementById("firstleft").getElementsByTagName("A"); for (var i=0; i<divLinks.length; i++) { divLinks[i].target = (userdef)? userdef : "_self"; } }
Ups, det virker ikke alligevel. Måske jeg ikke beskrev strukturen helt klart i starten. Der også links i 'stamp' men de skal ikke have ændret deres target. Og det får de med din løsning. Med min er det tilgengæld kun den første forekomst af '<div id=cont>' der bliver berørt.
Jeg prøvede med flg. men det virker slet ikke
function targetLinks(userdef) { var divs = document.getElementById("firstleft").document.getElementById("cont"); if (userdef) where = userdef; else where = "_self"; for (var d=0; d<=(divs.length-1); d++) { var divLinks = divs[d].getElementsByTagName("A"); for (var i=0; i<=(divLinks.length-1); i++) { divLinks[i].target = where;} } }
Det er noget totalt rod, du har lavet. Alle id'er på en side _skal_ være unikke. At du overhovedet kan få noget til at virke med flere, må bero på en browserbug. Dø bør afgjort skrive siden om med unikke id'er /mvh
Ingen grund til at bryde hovedet med det mere. Siden bliver allivel genereret fra en db, så jeg har fikset det ad den vej. Det er ikke lækkert, men det virker.
Det er ligegyldigt, hvad du bruger dem til ... visse browsere kan gå ned af det. Brug class i stedet ... det giver også langt bedre performance. Det er langsomt at tildele et element style-properties via en id. /mvh
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.