2010-01-10 41 views
5

我有以下鏈接:的JavaScript添加類當鏈接被點擊

<a class="active" href="#section1">Link 1</a> 
<a href="#section2">Link 2</a> 

當鏈路2被點擊我想它接收活動類和移除鏈接1本身的類,所以這將有效地成爲:

<a href="#section1">Link 1</a> 
<a class="active" href="#section2">Link 2</a> 

這應該是兩種方式。 IE瀏覽器。無論點擊什麼鏈接都可以獲得課程並將其從另一個課程中移除。

這怎麼能用JavaScript/Prototype來完成?

回答

2

你可以寫prototype支持小助手功能,從所有active元素移除類將其添加到被點擊的那個:

function active(e) { 
    $$('.active').each(function(i) { 
     i.removeClassName('active'); 
    }); 
    e.addClassName('active'); 
}; 

你可以從你的onclick事件中調用這個函數:

<a href="#sectiona" onclick="active(this)">a</a> 
<a href="#sectionb" onclick="active(this)">b</a> 
<a href="#sectionc" onclick="active(this)">c</a> 
+0

謝謝,這個作品完美 – a1anm 2010-01-10 16:30:03

7

試試這個:

// initialization 
var links = document.links; 
for (var i=0; i<links.length; ++i) { 
    links[i].onclick = function() { 
     setActive(links, this); 
    }; 
} 

function setActive(links, activeLink) { 
    for (var i=0; i<links.length; ++i) { 
     var currentLink = links[i]; 
     if (currentLink === activeLink) { 
      currentLink.className += " active"; 
     } else { 
      currentLink.className = currentLink.className.split(/\s+/).map(function(val) { 
       return val === "active" ? "" : val; 
      }).join(" "); 
     } 
    } 
} 
+0

這樣做會不會對頁面中的所有鏈接起作用?我只希望它爲整個頁面中的2個鏈接執行此操作。 – a1anm 2010-01-10 16:01:56

+0

如果您用兩個'A'元素的數組替換'document.links',它將僅適用於這兩個元素。 – Gumbo 2010-01-10 16:09:23

1

如果是jQuery的,我會做這樣

$(document).ready(
    function(){ 
     $("a").click(function(){ 
     $("a").toggleClass("active"); 
     }); 
    } 
    )