2011-07-11 78 views
2

我在页面的顶部有2个选项卡。当单击一个选项卡时,我希望该选项卡具有“活动”类,另一选项卡具有“非活动”类,以便用户可以看到当前选择的选项卡。我怎么能用javascript/css来做这件事?Change div style onclick

<div class="tabActive"> 
Option 1 
</div> 

<div id="tabInactive"> 
Option 2 
</div> 
+4

你使用就像一个图书馆jQuery的? – pimvdb

+0

你有没有尝试过任何东西呢? – Dan

+0

对不起,这个项目 – Mike

回答

2

另一个非jQuery的解决方案可能是有两个以上div工作如下:

function changeClass(elClass) { 
    var divsLenght = document.getElementsByTagName("div").length; 
    for (var i = 0; i < divsLenght; i++) { 
    document.getElementsByTagName("div")[i].className = "tabInactive"; 
    } 
    elClass.className = "tabActive"; 
} 

演示:http://jsbin.com/opetec/2

+0

如何防止更改页面上的所有其他div? – Mike

+0

@Mike在每个'div'中添加一个'class',例如菜单,并获取它们的长度。演示:http://jsbin.com/opetec/4 – Sotiris

+0

非常感谢很多人,真的很感激它 – Mike

1
<div class="tabInactive" onclick="this.classname='tabActive'"></div> 

如果使用jQuery:

$("div.tabInactive").click(function() { 
    $("div.tabInactive").removeClass("tabActive"); 
    $(this).addClass("tabActive"); 
}); 
+0

我想另一个标签页应该再次删除它的活动类(在你的非jQuery示例中)。 – pimvdb

+0

+1包括非jQuery的答案,但JS应该[unobtrusive](http://en.wikipedia.org/wiki/Unobtrusive_JavaScript) –

0

试试这个使用jQuery

<div class="tab active"> 
Option 1 
</div> 

<div class="tab"> 
Option 2 
</div> 

<script> 
$(function(){ 
    $(".tab").live("click", function(){ 
     $(".tab").removeClass("active"); 
     $(this).addClass("active"); 
    }); 
}); 
</script> 
-1

这是我的猜想:

$('.tabActive, #tabInactive').click(function() { 
    $(this).toggleClass('active'); 
} 
1

给哟乌尔标签类 “标签” 的... HTML:

<div class="tab"> 
... 
</div> 
<div class="tab"> 
... 
</div> 

JS:

function getByClass(_class, elem) { 
    var i, result = [], elems = document.getElementsByTagName("div"); //get the elements 
    for (i = 0; i < elems.length; i++) { 
     if (elems[i].className.indexOf(_class) !== -1) { //if the elements have the class passed in, add it to the result array 
      result.push(elems[i]); 
     } 
    } 
    return result; 
} 
var i, tabs = getByClass("tab", "div"); //get all divs with class tab 
for (i = 0; i < tabs.length; i++) { //for each tab... 
    tabs[i].onclick = function() { //wire up it's click event... 
     //to clear the other tabs... 
     var j; 
     for(j=0; j < tabs.length; j++) { 
      tabs[j].className = tabs[j].className.replace(" active", ""); 
     } 
     this.className += " active"; //where active is a class predefined in the CSS 
    }; 
} 

http://jsfiddle.net/thomas4g/pqMq2/12/

1

这里是不使用任何的jQuery的解决方案!它确实认为只有2个标签认为。

http://jsfiddle.net/nYpV3/

<div id="tab1" onclick="setToActive(this, 'tab2');"> 
Option 1 
</div> 

<div id="tab2" onclick="setToActive(this, 'tab1');"> 
Option 2 
</div> 

function setToActive(me, otherId){ 

    me.className='active'; 
    document.getElementById(otherId).className='inactive'; 
} 
+2

这是一个很好的例子,但只能在两个选项卡上工作。如果添加了其他选项卡,则无论如何都不会有效。 – brenjt

+0

也许可以使用':target' CSS选择器重新创建 - 唯一的缺点就是找出初始状态。 – Nightfirecat