简体   繁体   English

将课程添加到 <li> 单击链接时

[英]Add class to <li> when clicking on a link

That's the html of my menu: 那是我菜单的html:

<ul class="nav">
    <li><a href="#a" class="active">A</a></li>
    <li><a href="#b" >B</a></li>
    <li><a href="#c" >C</a></li>
    <li><a href="#d" >D</a></li>
</ul>

I want that, after I clicked on a link in the menu, the active class will be added to the clicked <li> . 我希望在单击菜单中的链接后,将活动类添加到单击的<li>

Thanks in advance 提前致谢

Use jquery 使用jQuery

    $("li a").click(function() {
    $('li a').not(this).removeClass('active');
    $(this).toggleClass('active');
    });

DEMO Updated 演示版已更新

He is not asking for a jQuery solution. 他没有要求使用jQuery解决方案。 But that jQuery would be the ideal choice, here is how to do it with javascript, best practices, event delegation and modern. 但是jQuery将是理想的选择,这是如何使用javascript,最佳做法,事件委托和现代方法来实现。 Perhaps someone learns something new from it as well. 也许有人也从中学到新东西。

http://jsfiddle.net/N9Hem/ http://jsfiddle.net/N9Hem/

window.onload = function(){

    (function(){
        var els = [];
        var doc = document;
        var get = function(id){return doc.getElementById(id);};

        get('clickable').onclick = function(evt){
            evt = evt || window.event;
            var el = evt.target || evt.srcElement;
            els = doc.querySelectorAll('#clickable a');

            if(el.nodeName == "A"){
                for(var i = els.length - 1; i >= 0; i -= 1){
                    els[i].className = '';
                };
                el.className = 'active';
            };

        };

    })();

};

If you use jQuery then you could use code like this: 如果使用jQuery,则可以使用如下代码:

$(function () {
    $(".nav a").click(function () {
        $(".nav a").removeClass("active");
        $(this).addClass("active");
    });
});

Try this with jQuery 尝试使用jQuery

$('#nav li a').click(function(){
    $('#nav li a').removeClass('active');
    $(this).addClass('active');
});

Here is a prototype that doesn't use jquery as you didn't request it on your question. 这是一个不使用jquery的原型,因为您没有在问题中请求它。 It searches for the current element with the active class, remove it and add the class to the clicked one. 它使用活动类搜索当前元素,将其删除并将该类添加到单击的元素。

Javasript Function Javasript函数

function activeThis(element){
    var current = document.getElementsByClassName("active")[0];
    current.className = null;
    element.className="active";
}

HTML code HTML代码

<a href="#b" onclick="activeThis(this)">

I hope I got what you want... I add eventHandlers to <ul> . 希望我能得到您想要的...我将eventHandlers添加到<ul> On click remove clicked from previous elem and set clicked-class (if current class is active??) 单击时,从上一个元素中删除被单击的鼠标,并设置单击的类(如果当前类处于活动状态?)

<ul class="nav">
    <li><a href="#a" class="active">A</a></li>
    <li><a href="#b">B</a></li>
    <li><a href="#c">C</a></li>
    <li><a href="#d">D</a></li>
</ul>
<script>
    var clickedElem = null;
    document.getElementsByClassName("nav")[0].addEventListener("click", function (e) {
        if (clickedElem)
            clickedElem.removeAttribute("class");

        // check if e.srcElement.className is active?? that's what you want?
        e.srcElement.className = "clicked";
        clickedElem = e.srcElement;
    });
</script>

This one should works for you 这应该适合你

elems =document.getElementsByClassName("nav")[0].getElementsByTagName("a");
for (var i = 0; i < elems.length; i++) {
        elems[i].addEventListener("click", function (e) {
                for (var i = 0; i < elems.length; i++) {
                    elems[i].className="";
                };
                this.className = "active";
        });
}

I guess this will work 我想这会起作用

var navlinks = document.getElementByClass('nav').getElementsByTagName('a');
for (var i = 0; i < navlinks.length; i++) {
    if(navlinks[i].className == 'active'){
        navlinks[i].parentNode.parentNode.parentNode.className = 'YOUR CLASS';
    }
}

thats quite easy 那很容易

jQuery CODE: jQuery代码:

$('.nav li a').on('click',function(){ 
 $('.nav li').each(function() {
    var anc=$(this).find('a');
    if(anc.hasClass('active'))
    { 
       $(anc).removeClass('active');
    }
 })
  $(this).addClass('active');
 })

Edited: Code is refined 编辑:代码已完善

Happy Coding :) 快乐编码:)

Check my fiddle 检查我的小提琴

I hope this is what you want 我希望这就是你想要的

http://jsfiddle.net/arunberti/ftZzs/ http://jsfiddle.net/arunberti/ftZzs/

a:visited 
{
    color:green;
}
a:active  {color:yellow;}

a:link {color:red;}   

Try this: 尝试这个:

$('.nav li').click(function(e) {
    $(this).addClass('selected').siblings().removeClass('selected');
});

Alternatively, if you want to attach the click event to the a : 或者,如果要将click事件附加到a

$('.nav a').click(function(e) {
    e.preventDefault();
    $('.nav a').removeClass('selected');
    $(this).addClass('selected');
});

Example fiddle 小提琴的例子

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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