jQuery 选择器
原生 JS 获取元素方式很多,很杂,而且兼容性情况不一致,因此 jQuery 给我们做了封装,使获取元素统一标准。
基础选择器
js
$("选择器") // 里面选择器直接写 CSS 选择器即可,但是要加引号
名称 | 用法 | 描述 |
---|---|---|
ID选择器 | $("#id") | 获取指定ID的元素 |
全选选择器 | $("*") | 匹配所有元素 |
类选择器 | $(".class") | 获取同一类class的元素 |
标签选择器 | $("div") | 获取同一类标签的所有元素 |
并集选择器 | $("div,p,i") | 选取多个元素 |
交集选择器 | $("li.current") | 交集元素 |
层级选择器
层级选择器最常用的两个分别为:后代选择器和子代选择器。
名称. | 用法 | 描述 |
---|---|---|
子代选择器. | $("ul>li"); | 使用 > 号,获取亲儿子层级的元素 ; 注意,并不会获取孙子层级的元素 |
后代选择器 | $("ul li"); | 使用空格,代表后代选择器,获取ul下的所有li元素,包括孙子等 |
基础选择器和层级选择器案例代码
html
<div>我是div</div>
<div class="nav">我是nav div</div>
<p>我是p</p>
<ol>
<li>我是ol 的</li>
<li>我是ol 的</li>
<li>我是ol 的</li>
<li>我是ol 的</li>
</ol>
<ul>
<li>我是ul 的</li>
<li>我是ul 的</li>
<li>我是ul 的</li>
<li>我是ul 的</li>
</ul>
javascript
$(function () {
console.log($('.nav'));
console.log($('ul li'));
});
伪类选择器
筛选选择器,顾名思义就是在所有的选项中选择满足条件的进行筛选选择。常见如下 :
语法 | 用法 | 描述. |
---|---|---|
:first | $(li:first') | 获取第一个i元素 |
:last | $(li:last') | 获取最后一个 li 元素 |
:eq(index) | $("li:eq(2)") | 获取到的 i 元素中,选择索引号为 2 的元素,索引号 index 从 0 开始。 |
:odd | $("li:odd") | 获取到的 li 元素中,选择索引号为奇数的元素 |
:even | $("li:even") | 获取到的 li 元素中,选择索引号为偶数的元素 |
案例代码
html
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
<li>item 4</li>
<li>item 5</li>
<li>item 6</li>
</ul>
<ol>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
<li>item 4</li>
<li>item 5</li>
<li>item 6</li>
</ol>
javascript
$(function () {
$("ul li:first").css("color", "red");
$("ul li:eq(2)").css("color", "blue");
$("ol li:odd").css("color", "skyblue");
$("ol li:even").css("color", "pink");
})
另: jQuery 中还有一些筛选方法,类似 DOM 中的通过一个节点找另外一个节点,父、子、兄以外有所加强。
筛选方法
语法 | 用法. | 说明 |
---|---|---|
parent() | $("li").parent() | 查找父级 |
children(selector) | $("ul").children("li") | 相当于$("ul>li") ,最近一级(亲儿子) |
find(selector) | $("u1").find("li") | 相当于$("ul li") ,后代选择器 |
siblings(selector) | $(".first").siblings("li") | 查找兄弟节点,不包括自己本身 |
nextAll([expr]) | $(".first").nextAll() | 查找当前元索之后所有的同辈元素 |
prevtAll([expr]) | $(".last").prevAll() | 查找当前元素之前所有的同辈元素 |
hasClass(class) | $('div').hasClass("protected") | 检查当前的元素是否含有某个特定的类,如果有,则返回 true |
eq(index) | $("li").eq(2) | 相当于$("li:eq(2)") ,index 从 0 开始 |
筛选方法示例1
html
<div class="yeye">
<span>爷爷</span>
<div class="father">
<span>爸爸</span>
<div class="son"><span>儿子</span></div>
</div>
</div>
javascript
// 注意一下都是方法 带括号
$(function () {
// 1. 父 parent() 返回的是 最近一级的父级元素 亲爸爸
console.log($('.son').parent().text());
// 2. 子
// (1) 亲儿子 children() 类似子代选择器 ul>li
$('.yeye').children('span').css('color', 'red');
// (2) 可以选里面所有的孩子 包括儿子和孙子 find() 类似于后代选择器
$('.yeye').find('span').css('color', 'red');
});
筛选方法示例 2
html
<ol>
<li>赵</li>
<li>钱</li>
<li class="item">孙</li>
<li>李</li>
<li>周</li>
<li>吴</li>
</ol>
<ul>
<li>我是 ol 的 li</li>
<li>我是 ol 的 li</li>
<li>我是 ol 的 li</li>
<li>我是 ol 的 li</li>
<li>我是 ol 的 li</li>
<li>我是 ol 的 li</li>
</ul>
<div class="current">俺有current</div>
<div>俺木有current</div>
javascript
// 注意一下都是方法 带括号
$(function () {
// 1. 兄弟元素 siblings 除了自身元素之外的所有亲兄弟
$('ol .item').siblings('li').css('color', 'red');
// 2. 第 n 个元素
var index = 2;
// (1) 我们可以利用选择器的方式选择
// $("ul li:eq(2)").css("color", "blue");
$('ul li:eq(' + index + ')').css('color', 'blue');
// (2) 我们可以利用选择方法的方式选择 更推荐这种写法
// $("ul li").eq(2).css("color", "blue");
// $("ul li").eq(index).css("color", "blue");
// 3. 判断是否有某个类名
console.log($('div:first').hasClass('current'));
console.log($('div:last').hasClass('current'));
});
隐式迭代
遍历内部 DOM 元素(伪数组形式存储)的过程就叫做隐式迭代。
简单理解:给匹配到的所有元素进行循环遍历,执行相应的方法,而不用我们再进行循环,简化我们的操作,方便我们调用。
html
<div>惊喜不,意外不</div>
<div>惊喜不,意外不</div>
<div>惊喜不,意外不</div>
<div>惊喜不,意外不</div>
<ul>
<li>相同的操作</li>
<li>相同的操作</li>
<li>相同的操作</li>
</ul>
js
// 1. 获取四个div元素
console.log($('div'));
// 2. 给四个div设置背景颜色为粉色 jquery对象不能使用style
$('div').css('background', 'pink');
// 3. 隐式迭代就是把匹配的所有元素内部进行遍历循环,给每一个元素添加css这个方法
$('ul li').css('color', 'red');
案例:新浪下拉菜单
参照实现 新浪的下拉菜单
html
<ul class="nav">
<li><a href="#">博客</a>
<ul>
<li><a href="">私信</a></li>
<li><a href="">评论</a></li>
<li><a href="">@我</a></li>
</ul>
</li>
<li><a href="#">博客</a>
<ul>
<li><a href="">博客评论</a></li>
<li><a href="">未读提醒</a></li>
</ul>
</li>
<li><a href="#">邮箱</a>
<ul>
<li><a href="">免费邮箱</a></li>
<li><a href="">VIP邮箱</a></li>
<li><a href="">企业邮箱</a></li>
</ul>
</li>
</ul>
html
<style>
* {margin: 0;padding: 0;}
li {list-style-type: none;}
a {text-decoration: none;font-size: 14px;}
.nav > li {position: relative;float: left;width: 80px;height: 41px;text-align: center;}
.nav li a {display: block;width: 100%;height: 100%;line-height: 41px;color: #333;}
.nav > li > a:hover {background-color: #eee;}
.nav ul {display: none;position: absolute;top: 41px;left: 0;width: 100%;}
.nav ul li {border-left: 1px solid #FECC5B;border-right: 1px solid #FECC5B;border-bottom: 1px solid #FECC5B;}
.nav ul li a:hover {background-color: #FFF5DA;}
</style>
javascript
$(function () {
// 鼠标经过
$('.nav>li').mouseover(function () {
// $(this) jQuery 当前元素 this不要加引号
// show() 显示元素 hide() 隐藏元素
$(this).children('ul').show()
})
// 鼠标离开
$('.nav>li').mouseout(function () {
$(this).children('ul').hide()
})
})
排他思想
当鼠标点击指定的按钮上面时,设置元素背景为粉色
html
<button>按钮 1</button>
<button>按钮 2</button>
<button>按钮 3</button>
<button>按钮 4</button>
<button>按钮 5</button>
<button>按钮 6</button>
<button>按钮 7</button>
js
$(function () {
// 1. 隐式迭代 给所有的按钮都绑定了点击事件
$("button").click(function () {
// 2. 当前的元素变化背景颜色
$(this).css("background", "pink");
// 3. 其余的兄弟去掉背景颜色 隐式迭代
$(this).siblings("button").css("background", "");
});
})
链式调用
链式调用可以简化元素的连续调用
html
<button>按钮 1</button>
<button>按钮 2</button>
<button>按钮 3</button>
<button>按钮 4</button>
<button>按钮 5</button>
<button>按钮 6</button>
<button>按钮 7</button>
javascript
$(function () {
// 隐式迭代 给所有的按钮都绑定了点击事件
$("button").click(function () {
// 链式编程
$(this).css("color", "red").siblings().css("color", "");
});
})