如何使用jQuery在单击锚标签链接时更改元素的类?

4

嗯,我该如何使用jQuery更改由锚点链接激活的具有ID的元素的类(active / non_active)?

HTML:

<a href="#element1">Show element 1</a>
<a href="#element2">Show element 2</a>

<div id="element1" class="active"><p>Element 1</p></div>
<div id="element2" class="non_active"><p>Element 2</p></div>

CSS:

.active{ visibility:visible; }
.non_active{ visibility:hidden; }

提前感谢!

5个回答

4

尝试

<a class="accordion-header" href="#element1">Show element 1</a>
<a class="accordion-header" href="#element2">Show element 2</a>
<div id="element1" class="element active">
    <p>Element 1</p>
</div>
<div id="element2" class="element">
    <p>Element 2</p>
</div>

那么

var $els = $('.element');
$els.not('.active').hide()
$(".accordion-header").on("click", function (e) {
    var $target = $($(this).attr('href')).show()
    $els.not($target).hide()
    e.preventDefault();
});

Demo: Fiddle


@PepijnGieles 请看第二个演示,其中有CSS、HTML和脚本的更改。 - Arun P Johny
在这种情况下,由于锚点指向同一页内的元素,是否需要使用 preventDefault?我甚至没有看到有什么区别。 - Harry

2
您可以直接获取被点击元素的href并将其用作选择器:
$("a").on("click", function() {
  $("div.active").toggleClass("active non-active");
  $($(this).attr("href")).toggleClass("active non-active");
});

0
$("a").click(function(){
   $(a).removeClass("active");// Nake all the existing links inactive by removing class active
   $(this).addClass("active"); //then make current link as active
});

0

non_active类是否必要?我会省略它,然后使用jQuery执行以下操作(为了可读性稍作扩展):

$('a').on('click', function(e){
    e.preventDefault(); // prevent the default <a> behaviour

    var $elm = $(this), // store the clicked element
        activateElement = $elm.attr('href'); // get the value of the href attribute

    $('.active').removeClass('active'); // remove currently active element

    $(activateElement).addClass('active');  // set clicked element to active by removing non_active
});

CSS:

div{ visibility: hidden; }
.active{ visibility:visible; }

演示


0
$("a").on("click", function() {
  var id = $(this).attr('href');
  $('.active').removeClass('active'); // remove existing active
  $(id).addClass('active'); // set current link as active
//or
//$(id).attr('class','active'); // set current link as active

});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接