简体   繁体   中英

Javascript how to change href

function PressMe(){   
    var elements = document.getElementsByClassName("navigation");
    for (var i = 0; i < elements.length; i++){
         elements[i].href = "#HTML";    
    }   
} 

Trying to create a function with plain JavaScript that should do the following but I am missing something and I am not sure what.

<li class="navigation">HTML</li> 

Should be changed into

<li class="navigation><a href="#HTML">HTML</a></li> 

For three list elements.

Have managed to do with jQuery but need it in JavaScript.

{
    $(".navigation").wrapInner("<a href='#HTML'></a>");
});

Problem : You're trying to set the href to the li .navigation directly when you do elements[i].href = "#HTML" .

Suggested solution: Get the text of every li .nvigation element then create the new anchor with href contain this text then append it to the li using .innerHTML :

for (var i = 0; i < elements.length; i++){
    var text = elements[i].innerText;
    elements[i].innerHTML = "<a href='#"+text+"'>"+text+"</a>";    
} 

Hope this helps.

 function PressMe() { var elements = document.getElementsByClassName("navigation"); for (var i = 0; i < elements.length; i++) { var text = elements[i].innerText; elements[i].innerHTML = "<a href='#"+text+"'>"+text+"</a>"; } } 
 <ul> <li class="navigation">HTML</li> <li class="navigation">TEST</li> <li class="navigation">TEXT</li> </ul> <button type='button' onclick='PressMe()'>Press Me </button> 

 function PressMe() { var elements = document.getElementsByClassName("navigation"); for (var i = 0; i < elements.length; i++) { var link = document.createElement("a"); link.href = "#" + elements[i].innerText; link.innerText = elements[i].innerText; elements[i].innerText = ""; elements[i].appendChild(link); } } PressMe(); 
 <ul> <li class="navigation">HTML</li> <li class="navigation">CSS</li> <li class="navigation">JAVASCRIPT</li> </ul> 

So select the text of the element, and add the anchor

 var elements = document.getElementsByClassName("navigation"); for (var i = 0; i < elements.length; i++) { var html = elements[i].innerHTML elements[i].innerHTML = '<a href="#' + html + '">' + html + '</a>'; } 
 <ul> <li class="navigation">HTML</li> <li class="navigation">FOO</li> <li class="navigation">BAR</li> <li class="navigation">WORLD</li> </ul> 

or you can use createElement and append it to the li.

 var elements = document.getElementsByClassName("navigation"); for (var i = 0; i < elements.length; i++) { var li = elements[i]; var html = li.innerHTML; li.innerHTML = ""; var anchor = document.createElement("a"); anchor.innerHTML = html; anchor.href = "#" + html; li.appendChild(anchor); } 
 <ul> <li class="navigation">HTML</li> <li class="navigation">FOO</li> <li class="navigation">BAR</li> <li class="navigation">WORLD</li> </ul> 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM