Avatar billede aerobee Nybegynder
25. august 2009 - 14:45 Der er 7 kommentarer og
1 løsning

loop igennem a tags og ændre classname

Hej.
Jeg har følgende kode:

<style type="text/css">
.box{
    width:150px;
    height:50px;
    background:#F0F;
}

.box1{
    width:150px;
    height:50px;
    background:#F00;
}

.box2{
    width:150px;
    height:50px;
    background:#000;
}

.box3{
    width:150px;
    height:50px;
    background:#00C;
}
</style>
</head>

<body>
<div id="changeme1" class="box1"></div>
<div id="changeme2" class="box2"></div>
<div id="changeme3" class="box3"></div>
<br /><br /><br />
<a href="java script:void(0)" onclick="document.getElementById('changeme1').className = 'box'">change color</a>
<a href="java script:void(0)" onclick="document.getElementById('changeme2').className = 'box'">change color</a>
<a href="java script:void(0)" onclick="document.getElementById('changeme3').className = 'box'">change color</a>


Når jeg klikker på de links der er, ændres classname på den pågældende id og boksen ændre farve. klikker jeg på alle links ændres alle classnames, og alle bokse ændre dermed farve. Det jeg gerne vil opnå er at når jeg klikker på et link, defaults alle de andre bokse tilbage til deres oprindelige classname.

Altså, kun en boks af gangen må have den farve defineret i css class .box. Har en boks allerede classname .box og man klikker på et link for at ændre en anden boks's farve skal den defaulte tilbage til det standard classname den havde.

Håber det er forståeligt ?
Avatar billede olebole Juniormester
25. august 2009 - 15:30 #1
<ole>

Generelt er det en rigtig skidt idé at ændre CSS-klassen på et element, da det som oftest er en operation, der performer rigtig skidt. Det er langt bedre og mere effektivt at skifte de enkelte properties på elementets style objekt.

/mvh
</bole>
Avatar billede aerobee Nybegynder
25. august 2009 - 18:26 #2
allright. men jeg skal jo stadig loope igennem alle a tags for at ændre style properties. Og mit oprindelige spørgsmål gik jo også ud på hvordan man looper. Jeg ved godt hvordan man ændrer et classname som kan ses herover. Jeg ved også hvordan man ændrer style properties.

Men hvordan finder jeg dynamisk alle a tages inden for et givent id og looper igennem dem ?
Avatar billede olebole Juniormester
25. august 2009 - 21:32 #3
Nej, det kan jeg netop ikke lige se ovenfor  =)

Attributter bør sættes og hentes med DOM Level 2+ metoderne setAttribute og getAttribute. Problemet er, at IE til og med version 7 bruger className som navn på attributten - mens alle andre standardiserede browsere (heriblandt IE 8) bruger class.

Derudover er der ingen grund til at spilde kræfter på at loope. I stedet gemmer man i den slags situationer en reference til det 'aktive' element i en variabel:

<script type="text/javascript">
var oColors = {
    changeme1: "#f00",
    changeme2: "#000",
    changeme3: "#00c"
};
var oActive = null;
function changeColor(sId) {
    if (oActive) oActive.style.background = oColors[sId];
    oActive = document.getElementById(sId);
    oActive.style.background = "#f0f";
}
</script>

<a href="#" onclick="changeColor('changeme1');return false">change color</a>
<a href="#" onclick="changeColor('changeme2');return false">change color</a>
<a href="#" onclick="changeColor('changeme3');return false">change color</a>
Avatar billede aerobee Nybegynder
26. august 2009 - 08:46 #4
Tak for dit svar olebole.
Jeg har ændret det til dette.

<style type="text/css">
.box{
    width:150px;
    height:50px;
    background:#F0F;
}

.box1{
    width:150px;
    height:50px;
    background:#F00;
}

.box2{
    width:150px;
    height:50px;
    background:#F00;
}

.box3{
    width:150px;
    height:50px;
    background:#F00;
}
</style>
</head>

<body>
<div id="changeme1" class="box1"></div>
<div id="changeme2" class="box2"></div>
<div id="changeme3" class="box3"></div>
<br /><br /><br />
<script type="text/javascript">
var oColors = {
    changeme1: "#f00",
    changeme2: "#f00",
    changeme3: "#f00"
};
var oActive = null;
function changeColor(sId) {
    if (oActive) oActive.style.background = oColors[sId];
    oActive = document.getElementById(sId);
    oActive.style.background = "#F0F";
}
</script>

<a href="#" onclick="changeColor('changeme1');return false">change color</a>
<a href="#" onclick="changeColor('changeme2');return false">change color</a>
<a href="#" onclick="changeColor('changeme3');return false">change color</a>


Det jeg også skal opnå er at det skal finde fx alle a tags inden for et givent id. Fx.

<div id="nav">
    <a></a>
    <a></a>
</div>

<a></a>
<a></a>

Dvs at den kun skal gøre det ved a tages inden for id'et nav.
Den skal også automatisk finde ud af selv hvor mange a tags der er, eftersom det kan variere. Et loop.
Avatar billede olebole Juniormester
26. august 2009 - 09:15 #5
var a = document.getElementById("nav").getElementsByTagName("a");

for (var i=0,j=a.length; i<j; i++) {
    // Gør noget ved a[i]
}
Avatar billede aerobee Nybegynder
26. august 2009 - 09:46 #6
allright.. tak for det olebole.
Smider du et svar ?
Avatar billede olebole Juniormester
26. august 2009 - 11:10 #7
Selvtak  =)
Avatar billede olebole Juniormester
26. august 2009 - 15:07 #8
Tak for points  =)
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