选项卡 jQuery 版本
html 代码
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" href="css/reset.min.css"><link rel="stylesheet" href="css/index.css"></head><body><div class="tabBox" id="tabBox"><ul class="header clearfix"><li class="active">新闻</li><li>电影</li><li>音乐</li></ul><div class="active">实时新闻</div><div>最新电影</div><div>欧美音乐</div></div><script src="js/jquery.min.js"></script><script src="js2/9-jq选项卡.js"></script></body></html>
css代码
.tabBox {margin: 20px auto;width: 602px;}.tabBox ul {box-sizing: border-box;border: 1px solid black;}.tabBox ul > li {box-sizing: border-box;float: left;width: 200px;border-right: 1px solid black;font-size: 16px;text-align: center;line-height: 40px;cursor: pointer;}.tabBox ul li:nth-last-child(1) {border-right: none;}.tabBox ul > li.active {background: yellow;}.tabBox div {display: none;font-size: 20px;line-height: 200px;border: 1px solid black;text-align: center;}.tabBox div.active {display: block;}.animate {height: 100px;text-align: center;background: greenyellow;}
js代码
$(function ($) {// 1. 获取元素let $tabList = $('.header li'),$divList = $('.tabBox div');// 2. 绑定点击事件$tabList.click(function () {let index = $(this).index(); // 获取当前点击的 li 的索引// 为点击的li增加类名 active 并且把其兄弟元素的 active 类名移除$(this).addClass('active').siblings().removeClass('active');// 通过被点击 li 的索引,找到对应的 div,为其增加 active,并且移除其兄弟元素的 active 类名$divList.eq(index).addClass('active').siblings().removeClass('active');})});
DOMContenLoaded
$(function ($) {// 等效于 DOMContentLoaded 事件,表示文档的 HTML 结构加载完成,然后再执行这里面的代码,同时把 jq 当做参数传递进来。// 这里面写我们自己的代码});
链式调用、原理
jQuery 的链式调用
$(this).addClass(‘active’).siblings().removeClass(‘active’);
jQuery 很多方法可以实现链式调用,原理是因为在其方法内部 return this,而 this 是 jq 的实例,所以可以继续调用 jq 原型上的方法。但是要注意很多方法最后 return 的不是 this,而是一个具体的值,如 width() 方法返回一个数字,就不能继续调用方法。
// 链式调用示例:let obj = {init(num) {this.num = num;return this},add(x) {this.num += x;return this;},multiple(t) {this.num *= t;return this;},div(d) {this.num /= d;return this},getVal() {return this.num}};console.log(obj.init(3).add(9).multiple(4).div(4));console.log(obj.init(3).add(9).multiple(4).getVal().div()); // Uncaught TypeError: obj.init(...).add(...).multiple(...).getVal(...).div is not a function 【因为getVal返回的是一个数字,不是this了,所以后面不能继续调用div方法】
