How do i getElementById("a") and add a class to it, using JavaScript,halfway there?

S

SM

Hello, i need to add a classname to an element <a> using JavaScript.
I've tried a couple of thing with no success.


This is an small piece of my code:
....
<li><a href="<?php echo $cd_img; ?>" onClick="show_picture(this);
return false;">image 1</a></li>
<li><a href="<?php echo $cd_img; ?>" onClick="show_picture(this);
return false;">image 2</a></li>
....

<img id="cover" src="<?php echo $cd_cover; ?>" alt="" /></div>


function show_picture(picture) {
var source = picture.getAttribute("href");
var cover = document.getElementById("cover");

cover.setAttribute("src", source);

//??????doesnt work
var el_a = document.getElementById("a");
el_a.className = "here";
}

Any ideas?

Thanks
Marco
 
G

Gregor Kofler

SM meinte:
Hello, i need to add a classname to an element <a> using JavaScript.
I've tried a couple of thing with no success.


This is an small piece of my code:
...
<li><a href="<?php echo $cd_img; ?>" onClick="show_picture(this);
return false;">image 1</a></li>
<li><a href="<?php echo $cd_img; ?>" onClick="show_picture(this);
return false;">image 2</a></li>
...

<img id="cover" src="<?php echo $cd_cover; ?>" alt="" /></div>


function show_picture(picture) {
var source = picture.getAttribute("href");
var cover = document.getElementById("cover");

cover.setAttribute("src", source);

//??????doesnt work
var el_a = document.getElementById("a");
el_a.className = "here";
}

As expected. Use other methods to get element references, like
getElementsByTagName() (returns a collection of elements with a given
name), or give your element a name or id and access it with
getElementById() or getElementsByName().

Gregor
 
S

SM

SM meinte:









As expected. Use other methods to get element references, like
getElementsByTagName() (returns a collection of elements with a given
name), or give your element a name or id and access it with
getElementById() or getElementsByName().

Gregor

--http://photo.gregorkofler.at::: Landschafts- und Reisefotografiehttp://web.gregorkofler.com ::: meine JS-Spielwiesehttp://www.image2d.com ::: Bildagentur für den alpinen Raum

getElementByTagName doesn't work for me. getElementById does work ok.
I can't imagine having 30+ <a> and give an 'id' tag for each. That's
just BAD programing in my opinion.
That's why i was looking for a general rule. Since i'm passing 'this'
in the function as a parameter, i was wondering if i could get the
parent or something similar and then add a class name. But then again,
i will need a way to undo that classname when i select another <a>.

I did more research and came up with this:

<ul id="nav_cd_imgs">
...
<li><a href="<?php echo $cd_img; ?>" onClick="show_picture(this);
return false;">image 1</a></li>
<li><a href="<?php echo $cd_img; ?>" onClick="show_picture(this);
return false;">image 2</a></li>
...
</ul>


var els_a =
document.getElementById("nav_cd_imgs").getElementsByTagName("a").length;

//testing purposes
alert(els_a);

//switch off all className in all <a>
for (i=0; i<els_a; i++) {
?????
}

//switch on the <a> selected with a className
????


I just need to find how to get the <a> selected. Any hints, meanwhile,
i'll continue searching the web and post the answer here if i find
something.


Thanks
Marco
 
G

Gregor Kofler

SM meinte:

Please, don't quote signatures.
getElementByTagName doesn't work for me.

It is getElement*s*ByTagName()
getElementById does work ok.
I can't imagine having 30+ <a> and give an 'id' tag for each. That's
just BAD programing in my opinion.

What do you expect? How would your original approach have distinguished
between the different anchor-elements?
That's why i was looking for a general rule. Since i'm passing 'this'
in the function as a parameter, i was wondering if i could get the
parent or something similar and then add a class name. But then again,
i will need a way to undo that classname when i select another <a>.

I did more research and came up with this:

<ul id="nav_cd_imgs">
...
<li><a href="<?php echo $cd_img; ?>" onClick="show_picture(this);
return false;">image 1</a></li>
<li><a href="<?php echo $cd_img; ?>" onClick="show_picture(this);
return false;">image 2</a></li>
...
</ul>

Untested:

function show_picture(clicked_a) {
var els_a =
document.getElementById("nav_cd_imgs").getElementsByTagName("a").length;

var els_a =
document.getElementById("nav_cd_imgs").getElementsByTagName("a");
//testing purposes
alert(els_a);

//switch off all className in all <a>
for (i=0; i<els_a; i++) {

for(var i = els_a.length; i--;) {
if(els_a.className == "foo") {
els_a.className = "bar";
}
if(els_a == clicked_a) {
els_a.className = "foo";
}
}


Gregor
 
S

SM

SM meinte:

Please, don't quote signatures.
getElementByTagName doesn't work for me.

It is getElement*s*ByTagName()
getElementById does work ok.
I can't imagine having 30+ <a> and give an 'id' tag for each. That's
just BAD programing in my opinion.

What do you expect? How would your original approach have distinguished
between the different anchor-elements?
That's why i was looking for a general rule. Since i'm passing 'this'
in the function as a parameter, i was wondering if i could get the
parent or something similar and then add a class name. But then again,
i will need a way to undo that classname when i select another <a>.
I did more research and came up with this:
<ul id="nav_cd_imgs">
...
<li><a href="<?php echo $cd_img; ?>" onClick="show_picture(this);
return false;">image 1</a></li>
<li><a href="<?php echo $cd_img; ?>" onClick="show_picture(this);
return false;">image 2</a></li>
...
</ul>

Untested:

function show_picture(clicked_a) {


var els_a =
document.getElementById("nav_cd_imgs").getElementsByTagName("a").length;

var els_a =
document.getElementById("nav_cd_imgs").getElementsByTagName("a");
//testing purposes
alert(els_a);
//switch off all className in all <a>
for (i=0; i<els_a; i++) {

for(var i = els_a.length; i--;) {
if(els_a.className == "foo") {
els_a.className = "bar";
}
if(els_a == clicked_a) {
els_a.className = "foo";
}


Gregor,
Awesome! I've try it and it works perfectly! Many thanks.
My mistake, i didn't not explain correctly what i was searching for.
At the end, it all work out for the best!

Thanks again
Marco
 
T

Thomas 'PointedEars' Lahn

Gregor said:
SM meinte:
Hello, i need to add a classname to an element <a> using JavaScript.
I've tried a couple of thing with no success.
[...]
//??????doesnt work
var el_a = document.getElementById("a");
el_a.className = "here";
}

As expected. Use other methods to get element references, like
getElementsByTagName() (returns a collection of elements with a given
name), [...]

A given *tag* name, or better: element type.
getElementById() or getElementsByName().

Yes, *these* are about element's IDs and names.


PointedEars
 
G

Gregor Kofler

Thomas 'PointedEars' Lahn meinte:
Gregor said:
SM meinte:
Hello, i need to add a classname to an element <a> using JavaScript.
I've tried a couple of thing with no success.
[...]
//??????doesnt work
var el_a = document.getElementById("a");
el_a.className = "here";
}
As expected. Use other methods to get element references, like
getElementsByTagName() (returns a collection of elements with a given
name), [...]

A given *tag* name, or better: element type.

Typo. Could cause some confusion. Sorry.

Gregor
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,997
Messages
2,570,239
Members
46,828
Latest member
LauraCastr

Latest Threads

Top