在此之前我们需要了解前几年流行起来的CSS(Cascading Style Sheet)----层叠样式表技术。CSS是一项出色的技术,它使得网页的结构和表现形式完全分离。利用CSS选择器可以轻松对某个元素添加样式而不改动HTML结构。除了“标签选择器(某文档元素 {CSS规则})”、“ID选择器(#ID {CSS规则})”、“类选择器(某文档元素.className {CSS规则})”、“群组选择器(文档元素1,文档元素2 {CSS规则})”、“后代选择器(父文档元素 子文档元素{CSS规则})”、“通配选择器(* {CSS规则})”,CSS还有伪类选择器(E:PseudoElements{CSS规则})、子选择器(E>F{CSS规则})、临近选择器(E+F{CSS规则})和属性选择器(E[attr]{CSS规则})等。但主流浏览器并非完全支持所有CSS选择器,但jQuery中的选择器能够完全兼容所有主流浏览器,jQuery中涉及操作CSS样式部分比单纯的CSS功能更为强大,并且拥有跨浏览器的兼容性。
首先一段HTML代码,以下选择器都基于此HTML代码操作
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JQuery选择器</title>
<!-- 引入 jQuery -->
<script src="../../scripts/jquery.js" type="text/javascript"></script>
<!--引入内部样式表-->
<style type="text/css">
div,span,p{
width:140px;
height:140px;
margin:5px;
background:#aaa;
border:#000 1px solid;
float:left;
font-size:17px;
font-family:Verdana;
}
div.mini{
width:55px;
height:55px;
background-color:#aaa;
font-size:12px;
}
div.hide{
display:none;
}
</style>
</head>
<body>
<div class="one" id="one">
id为one,class为one的div
<div class="mini">class为mini</div>
</div>
<div class="one" id="two" title="test">
id为two,class为one,title为test的div
<div class="mini" title="other">class为mini,title为other</div>
<div class="mini" title="test">class为mini,title为test</div>
</div>
<div class="one">
<div class="mini">class为mini</div>
<div class="mini">class为mini</div>
<div class="mini">class为mini</div>
<div class="mini"></div>
</div>
<div class="one">
<div class="mini">class为mini</div>
<div class="mini">class为mini</div>
<div class="mini">class为mini</div>
<div class="mini" title="tests">class为mini,title为tesst</div>
</div>
<div style="display:none;" class="none">
style的display为"none"的div
</div>
<div class="hide">class为"hide"的div</div>
<div>
包含input的type为"hide"的div<input type="hidden" size="8"/>
</div>
<span id="mover">正在执行动画的span元素</span>
</body>
</html>
基本选择器是jQuery中最常用的选择器,也是最简单的选择器,通过标签、元素id、class等来查找DOM元素。在网页中,每个id名称只能使用一次,class允许重复使用。
选择器 | 描述 | 返回 | 示例 |
---|---|---|---|
#id | 根据给定id匹配一个元素 | 单个元素 | $("#test")选取id为test的元素 |
.class | 根据类名匹配元素 | 集合元素 | $(".test")获取所有class为test的元素 |
element | 根据的元素名匹配元素 | 集合元素 | $(“p”)选取所有 元素 |
* | 匹配所有元素 | 集合元素 | $("*")选取所有元素 |
select1,select2… | 将每一个选择器匹配到的元素合并一起返回 | 集合元素 | $(“div,span,p.myClass”)选取所有
,
和拥有class为myClass的
标签的一组元素 |
例子:
如果想通过DOM元素之间的层次关系获取特定元素,例如后代元素、子元素、相邻元素和同辈元素,则使用层次选择器。
选择器 | 描述 | 返回 | 示例 |
---|---|---|---|
$(“ancestor descendant”) | 选取ancestor元素里的所有descendant(后代)元素 | 集合元素 | $(“div span”)选取
里所有的
元素
|
$(“parent > child”) | 选取parent元素下的child(直接子元素,child下面的元素不会选取) | 集合元素 | $(“div>span”)选取
元素仅下一层元素名是
的子元素
|
$(“prev+next”)等价$(“prev”).next(“div”) | 选取紧接在prev元素后的同辈next元素 | 集合元素 | $(".one+div")选取class为one的下一个
同辈元素
|
$(“prev~siblings”)等价$(“prev”).nextAll(“siblings”) | 选取prev元素之后的所有>siblings元素 | 集合元素 | $("#two~div")选取id为two的元素后面的所有
同辈元素
|
tips:
$(“prev~siblings”)或者$(“prev”).nextAll(“siblings”)只能选择"prev"元素后面的同辈"siblings"元素。而siblings()方法与前后位置无关,如$(“prev”).siblings(“div”).css(“background”,"#bbffaa");选取"prev"所有的同辈div元素,无论前后位置。
例子:
过滤选择器主要通过特定的过滤规则来筛选出所需的DOM元素,过滤规则与CSS中伪类选择器语法相同,过滤器都是以冒号(:)开头且与选择器结合使用,通常选择器选择的都是一个集合,包含多个标签元素,当我们进一步选择的话就需要过滤器,即先进行选择再进行过滤。
内容过滤选择器的过滤规则主要体现在它所包含的子元素或文本内容上。
根据元素的可见和不可见状态来选择相应的元素。
选择器 | 描述 | 返回 | 示例 | 执行后 |
---|---|---|---|---|
:hidden | 选取所有不可见元素 | 集合元素 | $(“div:hidden”).show(3000)由隐藏3秒切换到显示 | |
:visible | 选取所有可见元素 | 集合元素 | $(“div:visible“)选取可见的 元素 |
tips:在可见性选择器中,:hidden不仅包含样式属性display为"none"的元素,也包括文本隐藏域
和visibility:hidden之类的元素。
属性过滤选择器是通过元素的属性来获取相应的元素。
子元素过滤选择器是筛选给定某个元素的子元素。
tips:
- :nth-child(even):选取每个父元素下索引值是偶数的元素
- :nth-child(odd):选取每个父元素下索引值是奇数的元素
- :nth-child(2):选取每个父元素下索引值等于2的元素
- :nth-child(3n):选取每个父元素下的索引值是3的倍数的元素,n从1开始
- :nth-child(3n+1):选取每个父元素下的索引值是(3n+1)的元素,n从1开始
表单对象的属性过滤器通过表单元素的状态属性(如选中、不可用等状态)匹配元素。
例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>2-11</title>
<!-- 引入jQuery -->
<script src="../scripts/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
//
$(document).ready(function(){
//重置表单元素
$(":reset").click(function(){
setTimeout(function() {
countChecked();
$("select").change();
},0);
});
//对表单内 可用input 赋值操作.
$('#btn1').click(function(){
$("#form1 input:enabled").val("这里变化了!");
return false;
})
//对表单内 不可用input 赋值操作.
$('#btn2').click(function(){
$("#form1 input:disabled").val("这里变化了!");
return false;
})
//使用:checked选择器,来操作多选框.
$(":checkbox").click(countChecked);
function countChecked() {
var n = $("input:checked").length;
$("div").eq(0).html("有"+n+" 个被选中!");
}
countChecked();//进入页面就调用.
//使用:selected选择器,来操作下拉列表.
$("select").change(function () {
var str = "";
$("select :selected").each(function () {
str += $(this).text() + ",";
});
$("div").eq(1).html("你选中的是:"+str+"");
}).trigger('change');
// trigger('change') 在这里的意思是:
// select加载后,马上执行onchange.
// 也可以用.change()代替.
});
//]]>
</script>
</head>
<body>
<h3> 表单对象属性过滤选择器.</h3>
<form id="form1" action="#">
<button type="reset">重置所有表单元素</button>
<br /><br />
<button id="btn1">对表单内 可用input 赋值操作.</button>
<button id="btn2">对表单内 不可用input 赋值操作.</button>
<br /><br />
<!-- 测试的元素 -->
可用元素:<input name="add" value="可用文本框"/> <br/>
不可用元素:<input name="email" disabled="disabled" value="不可用文本框"/><br/>
可用元素: <input name="che" value="可用文本框" /><br/>
不可用元素:<input name="name" disabled="disabled" value="不可用文本框"/><br/>
<br/>
多选框:<br/>
<input type="checkbox" name="newsletter" checked="checked" value="test1" />test1
<input type="checkbox" name="newsletter" value="test2" />test2
<input type="checkbox" name="newsletter" value="test3" />test3
<input type="checkbox" name="newsletter" checked="checked" value="test4" />test4
<input type="checkbox" name="newsletter" value="test5" />test5
<div></div>
<br/><br/>
下拉列表1:<br/>
<select name="test" multiple="multiple" style="height:100px">
<option>浙江</option>
<option selected="selected">湖南</option>
<option>北京</option>
<option selected="selected">天津</option>
<option>广州</option>
<option>湖北</option>
</select>
<br/><br/>
下拉列表2:<br/>
<select name="test2" >
<option>浙江</option>
<option>湖南</option>
<option selected="selected">北京</option>
<option>天津</option>
<option>广州</option>
<option>湖北</option>
</select>
<br/><br/>
<div></div>
</form>
</body>
</html>
表单选择器是匹配经常在表单内出现的元素,但是匹配的元素不一定在表单中
选择器 | 描述 | 返回 | 示例 |
---|---|---|---|
:input | 选取所有、 | 集合元素 | $(":input") |
:text | 选取所有的单行文本框 | 集合元素 | $(":text")获取所有单行文本框 |
:password | 选取所有密码框 | 集合元素 | $(":password")选取所有密码框 |
:radio | 选取所有单选框 | 集合元素 | $(":radio")选取所有单选框 |
:checkbox | 选取所有多选框 | 集合元素 | $(":checkbox")选取所有复选框 |
:submit | 选取所有的提交按钮 | 集合元素 | $(":submit")选取所有提交按钮 |
:image | 选取所有图像按钮 | 集合元素 | $(":image")选取所有图像按钮 |
:reset | 选取所有重置按钮 | 集合元素 | $(":reset")选取所有的重置按钮 |
:button | 选取所有按钮 | 集合元素 | $(":button")选取所有按钮 |
:file | 选取所有上传域 | 集合元素 | $(":file")选取所有上传域 |
:hidden | 选取所有不可见元素 | 集合元素 | $(":hidden")选取所有不可见元素 |