我正在使用bootstarp导航栏。由于在单击tavs时bootstrap不会自动切换active
选项卡,因此我已经编写了一些JQuery来为我执行此操作。我以前做过这个,我无法弄清楚我做错了什么。
我的HTML:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<link rel="stylesheet" type="text/css" href="public\bootstrap-3.3.2-dist\css\bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="public\bootstrap-3.3.2-dist\css\bootstrap-theme.min.css">
<link rel="stylesheet" type="text/css" href="public\styles\style.css">
<script src="https://code.jquery.com/jquery-latest.min.js"></script>
<script src="public\bootstrap-3.3.2-dist\js\bootstrap.min.js"></script>
<script src="public\js\script.js"></script>
</head>
<body>
<div class="header">
<h1><em>This is a test</em></h1>
</div>
<ul class="nav nav-tabs">
<li id="tab" class="active"><a href="1.html">Page 1</a></li>
<li id="tab"><a href="1.html" target="content">Page 2</a></li>
<li id="tab"><a href="1.html" target="content">Page 3</a></li>
</ul>
</body>
</html>
我的JQuery代码:
$(document).ready(function() {
$('#tab').click(function(event) {
$('.active:first').removeClass('active');
el = event.target;
el.addClass('active');
});
});
每当我单击一个选项卡时,它应该获得带有active
类的第一个元素,删除active
类,然后将active
类添加到单击的元素中。但它不起作用。当我单击选项卡时,它只会按照链接执行操作。我尝试更改伪类:first
的使用以使用Jquery&#39; .first()
,但这不起作用。我以前再做过这个,但现在不能让它工作。我做错了什么?
答案 0 :(得分:1)
您在非jQuery对象上使用.addClass()
方法。
用event.target
包裹$()
- &gt; $(event.target)
$('.tab').on('click', function (event) {
event.preventDefault();
$('.active').removeClass('active');
$(event.target).closest('.tab').addClass('active');
});
一些附注:
id
必须是唯一的,它们应该不重复。改为使用类。event.preventDefault()
来阻止默认行为。由于$(event.target)
是被点击的元素,因此如果单击它,它将包含锚元素。由于active
类应位于父li
元素上,因此您可以使用$(event.target).closest('.tab')
选择它,如上例所示。或者,由于事件处理程序已附加到.tab
元素,因此您也可以使用$(this)
。
$('.tab').on('click', function (event) {
event.preventDefault();
$('.active').removeClass('active');
$(this).addClass('active');
});
完成这些更改后,请查看this example。