In Javascript, have you ever needed to create a hyperlink element like this?:

div = document.getElementById('foo');
newlink = document.createElement('a');
div.appendChild(newlink);

That snippet doesn't do much. It just creates a hyperlink element with no href, class, title or content. Let's make it a bit more useful:

newlink = document.createElement('a');
newlink.setAttribute('class', 'signature');
newlink.setAttribute('href', 'showSignature(xyz)');

The problem with this code is that the href becomes a link to a page called showSignature(xyz) and not a javascript function call to the function showSignature() with parameter xyz.

Solution, which took me some time to figure out, is that you have to use the javascript: prefix on the href for it to become an active javascript function caller. So this is how it should be:

newlink = document.createElement('a');
newlink.setAttribute('class', 'signature');
newlink.setAttribute('href', 'javascript:showSignature(xyz)');

But I've got a sneaky feeling there's something wrong with this. Using the javascript: prefix feels a bit 1999. Can someone fill in my brainblanks on this?

UPDATE Just realised what would have been much better; set the href to # and use the onclick event instead. Problem solved.

Carlos Blas - 03 March 2006 [«« Reply to this]
FYI: I am writting a JSP that also dynamically creates an <a href> element and found that the href="#" did not work, but the href="javascript:function" did work. Thanks for the help.
Anonymous - 12 April 2007 [«« Reply to this]
You should never set an href to # for a javascrpit event. You were right to set an onclick event, but the href should really be javascript:void(0) to avoid refresh issues.
Anonymous - 01 June 2007 [«« Reply to this]
how to set onclick event?
RCA - 26 July 2008 [«« Reply to this]
newlink.setAttribute('onclick', 'myHandle(this)');
Anonymous - 26 June 2007 [«« Reply to this]
Yes, how DO you add the onclick event?
Mehrbod - 20 July 2007 [«« Reply to this]
Apparently it works but because we cannot set 'Text' property/attribute of <a> tag we cannot see the generated hyperlinks. That would be great if someone can let me know how to set it.
RobertZDeveloper - 16 November 2007 [«« Reply to this]
try new.innerHTML = 'link_text' to get the text in there
alfred - 14 December 2007 [«« Reply to this]
thank you very much, but i have a question, what about de text you are going to click?
Anonymous - 16 January 2008 [«« Reply to this]
tn = document.createTextNode('link text');
newlink.appendChild(tn);

That will create the clickable text.
Sam P. - 23 August 2009 [«« Reply to this]
Actually, you should use # for href. The point is that you can avoid using old 'javascript:<...>' style links.

Make sure to 'return false' from your onclick event to prevent submitting your link and any page refresh issues.

Even better, change the # to a POST URL so that it works for people w/o a JS-enabled browser (webphones, etc.)
Anonymous - 25 August 2009 [«« Reply to this]
>>>>> Even better, change the # to a POST URL so that it works for people w/o a JS-enabled browser (webphones, etc.)

if they don't have javascript enabled then the element will not be created!!!!
Anonymous - 02 October 2009 [«« Reply to this]
I had a problem getting the onclick to work in IE when created with setAttribute. I used this and it worked:

newlink.onclick = function (e) { myHandle(this); }
Don Don - 08 October 2009 [«« Reply to this]
How to make the link with the attribute of target="_new" ? the

newlink.setAttribute('href', 'xyz.html')

would not suffice?

Thanks
43.53 - 24 November 2009 [«« Reply to this]
ok
Anonymous - 12 February 2010 [«« Reply to this]
hello i'm trying to create anchor tag in javascript-

var div1=document.getElementById("tabarea");
var tab=document.createElement("a");
tab.setAttribute("class","tab");
tab.setAttribute("href","a.html");
tab.innerHTML="<a class=\""+"tab"+"href=\""+"a.html"+"\></a>"
div1.appendChild(tab);

here i'm trying to add a tab dynamically(which is my custom tag,created using 'a' tag ) to my tab area.if i add text,button it gets added, but 'a' tag :(
can anyone please help?
MrCambron - 21 July 2011 [«« Reply to this]
Ooh ya I needed new.innerHTML = 'some content'. It is not innerHTML(''). For an HTML5 music player on my web project: IntroNoOutro.com
Anonymous - 11 March 2013 [«« Reply to this]
<!DOCTYPE html>
<html>
<body>

<script>

var txt="Chapter 10";
txt.anchor("chap10");
var l=txt.anchor.id;
l="1";
alert(l);

</script>

</body>
</html>
Karissa M - 25 November 2014 [«« Reply to this]
// create the element
    var newLink = document.createElement("a");
    // add the URL attribute
    newLink.setAttribute("href", "http://www.w3.org/DOM/");
    // Add some text
    newText = document.createTextNode("What is DOM?");
    // Add it to the new hyperlink
    newLink.appendChild(newText);
    // Find the place to put it
    placeholder = document.getElementById("myLink");
    // add this to the DOM in memory
    placeholder.appendChild(newLink);


Your email will never ever be published