2.1 JQuery选择器是什么
转自:http://www.cnblogs.com/lwcompany/
1.css选择器
选择器 语法 描述 示例
标签选择器 E{
css规则
} 以文档元素作为选择符 td{
font-size:14px;
width:120px;
}
a{
text-decoration:none;
}
ID选择器 #ID{
CSS规则
} 以文档元素的惟一标识符ID作为选择符 #note{
font-size:14px;
width:129px;
}
类选择器 E.classname{
css规则
} 以文档元素的class作为选择符 div.note{
font-size:14px;
}
.dream{
font-size:14px;
}
群组选择器 E1,E2,E3{
css规则
} 多个选择符应用同样的样式 td,p,div.a{
font-size:14px;
}
后代选择器 E F{
CSS规则
} 元素E的任意后代元素F #inks a{
color:red;
}
通配选择符 *{
css规则
} 以文档的所有元素作为选择符 *(
font-size:14px;
}
?1 例如要使所有class为demo的<p>元素里的字体加粗,可以直接在<style>里编写,而不需要去网页里寻找所有clss为DEMO的<p>元素逐个添加样式。代码如下:
?1
2
3
4
5
6
7
8 <style>
.demo{
color:red;
font-size:30px;
font-weight:bold; //字体加粗
}
</style>
<p class="demo"> css demo.</p>
?1 2.JQuery选择器
?1 jQuery中的选择器完全不继承了css的风格,可以非常便捷和快速地找出特定的DOM元素,然后为它们添加相应的行为,选择器是学习JQuery的基础,jQery的行为规则都是在获取到元素后才能生效。
?1
2
3
4
5
6 <script type="text/javascript">
function demo(){
alert("javascript demo.");
}
</script>
<p οnclick="demo();">点击我.</p>
?1 像上面这样把javascript代码和html代码混杂在一下很不妥,因为它没有将网页和行为分离,建议使用下面的方法,
?1
2
3
4
5
6 <p class="demo">jquery demo</p>
<script type="text/javascript">
$(".demo").click(function(){
alert("jquery demo!");
})
</script>
?1 可以对css的写法和jquery的写法进行比较
?1 css获取至元素的代码如下
?1 .demo{
?1 … //给class为demo的元素添加样式
?1 }
?1 jQuery获取到元素的代码如下:
?1 $(“.demo”{ //给class为demo的元素添加行为
?1 …..
?1 }
?1 2.2 jQuery选择器的优势
?1 1.简洁的写法
?1 2.支持css1到css3选择器
?1 3.完善的处理机制
?1
?1 2.3 jQuery选择器
?1 先看几组用传统的javascript方法获取页面元素,然后给元素添加行事件的例子。
?1 例1 :给网页中的所有<p>元素添加onclick事件
?1 html代码如下:
?1 <p>测试1</p>
?1 <p>测试2</p>
?1 要做的工作有以下几项。
?1 1.获取所有<p>元素。
?1 2.对<p>元素进行循环(因为获取的是数组对象)
?1 3.给每个<p>元素添加行为事件
<script type="text/javascript">
window.onload = function(){//页面所有元素加载完毕
var items = document.getElementsByTagName("p");//获取页面中的所有p元素
for(var i=0;i < items.length;i++){ //循环
items[i].onclick = function(){ //给每一个p添加onclick事件
//doing something...
alert("suc!");
}
}
}
</script>
</head>
<body>
<p>测试1</p>
<p>测试2</p>
</body>
</html>
?1
?1 例2:使一个特定的表格隔行变色。
?1 要作的工作有几项:
?1 1.根据表格id获取表格
?1 2.在表格内获取<tbody>元素
?1 3.在<tbody>元素下获取<tr>元素
?1 4.循环输出获取的<tr>元素
?1 5.对<tr>元素的索引值除以2并取模,然后根据奇偶设置不同的背景色。
<script type="text/javascript">
window.onload = function(){ //页面所有元素加载完毕
var item = document.getElementById("tb"); //获取id为tb的元素(table)
var tbody = item.getElementsByTagName("tbody")[0]; //获取表格的第一个tbody元素
var trs = tbody.getElementsByTagName("tr"); //获取tbody元素下的所有tr元素
for(var i=0;i < trs.length;i++){//循环tr元素
if(i%2==0){ //取模. (取余数.比如 0%2=0 , 1%2=1 , 2%2=0 , 3%2=1)
trs[i].style.backgroundColor = "#888"; // 改变 符合条件的tr元素 的背景色.
}
}
}
</script>
</head>
<body>
<table id="tb">
<tbody>
<tr><td>第一行</td><td>第一行</td></tr>
<tr><td>第二行</td><td>第二行</td></tr>
<tr><td>第三行</td><td>第三行</td></tr>
<tr><td>第四行</td><td>第四行</td></tr>
<tr><td>第五行</td><td>第五行</td></tr>
<tr><td>第六行</td><td>第六行</td></tr>
</tbody>
</table>
</body>
</html>
?1 上面是传统的javascript方法乾地操作,中间使用了getelemetnbyid()、getelementsbytagname()和getelementsbyname()等方法,然后动态地给元素添加行为或样式。还不断重复使用getelementbyid和
?1 getelementsbytagname()等冗长难记的名称,开发人员开始厌倦这种写未能。然而JQuery中,类似的这些操作则是非常简洁.
?1 下面学习如何使用jquery获取这些元素。
?1 jquery选择器分为基本选择器、层次选择器、过滤选择器和表单选择器。
?1 2.3.1 基本选择器
?1 基本选择器是JQuery中最常用的选择器,也是最简单的选择器,它通过元素id、class、标签名来查找DOM元素。
?1 在网页中,每个id名称只能使用一次,class允许重复使用。
选择器 描 述 返 回 示 例
#id 根据给定的ID匹配一个元素 单个元素 $(“#test”)选择id为test的元素
.class 根据给定的类名匹配元素 集合元素 $(“.test”)选取所有class为test的元素
element 要据给定的元素名匹配元素 集合元素 $(”p”)选取所有的<p>元素
* 匹配所有元素 集合元素 $(“*”)选取所有元素
selector1, selector2,
…,selectorN 将每一个选择器匹配到的元素合并后一起返回 集合元素 $(“idv,span,p,myclass“)选取所有<div>,<span>和拥有class为myclass的<p>标签的一组元素
?1 选择器的示例:
<script src="../scripts/jquery-1.3.1.js" type="text/javascript"></script>
<script src="../scripts/assist.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="../css/style.css" />
<script type="text/javascript">
$(document).ready(function(){
//选择 id为 one 的元素
$('#btn1').click(function(){
$('#one').css("background","#bfa");
});
//选择 class 为 mini 的所有元素
$('#btn2').click(function(){
$('.mini').css("background","#bfa");
});
//选择 元素名是 div 的所有元素
$('#btn3').click(function(){
$('div').css("background","#bfa");
});
//选择 所有的元素
$('#btn4').click(function(){
$('*').css("background","#bfa");
});
//选择 所有的span元素和id为two的div元素
$('#btn5').click(function(){
$('span,#two').css("background","#bfa");
});
});
</script>
</head>
<body>
<button id="reset">手动重置页面元素</button>
<input type="checkbox" id="isreset" checked="checked"/><label for="isreset">点击下列按钮时先自动重置页面</label><br /><br />
<h3>基本选择器.</h3>
<!-- 控制按钮 -->
<input type="button" value="选择 id为 one 的元素." id="btn1"/>
<input type="button" value="选择 class 为 mini 的所有元素." id="btn2"/>
<input type="button" value="选择 元素名是 div 的所有元素." id="btn3"/>
<input type="button" value="选择 所有的元素." id="btn4"/>
<input type="button" value="选择 所有的span元素和id为two的元素." id="btn5"/>
<br /><br />
<!-- 测试的元素 -->
<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="tesst">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为"hidden"的div<input type="hidden" size="8"/>
</div>
<span id="mover">正在执行动画的span元素.</span>
</body>
</html>
?1 2.3.2 层次选择器
?1 如果想通DOM元素之间的层资来获取特定元素,例如后代元素、子元素,
?1 相邻元素和兄弟元素等,那么层次选择器是一个非常好的选择。
选择器 描述 返回 示例
$(“ancestor descendant”) 选取ancestor 元素里的所有descendant(后代)元素 集合元素 $(“div span”)选取<div>里的所有的<span>元素
$(“parent>child) 选择parent元素下child,与$(“anestor descendant”)有区别,$(“anestor descendant”)选择的是后代元素 集合元素 $(“div>span”)选取<div>元素下元素名是<span>的子元素
$(“prev+next”) 选取紧接在prev元素后next元素 集合元素 $(‘.one+div’)选取class为one的下一个<div>元素
$(“prev~siblings”) 选取prev元素后的所有siblings元素 集合元素 $(“#two~div”)
选取ID为two的元素后面的所有<div>兄弟元素
?1
?1 2.3.3 过滤选择器
?1 过滤器规则来筛选出所需的DOM元素,过滤规则与css中的伪类选择器语法相同,以:开头。过滤选择器可以分为基本过滤、内容过滤、可见性过滤、属性过滤、子元素过滤和表单对象属性过滤
?1 1.基本过滤选择器
选择器 描述 返回 示例
:first 选取第一个元素 集合元素 $(“div:first”)选择所有div元素中第1个div元素
:last 选取最后一个元素 集合元素 $(“div:last”)选取所有div元素中最后一个div元素
:not(selector) 去除所有与给定选择器匹配的元素 集合元素 $(“input:not(.myclass)选择class 不是mylcass的input元素
:even 选取索引是偶数的所有元素,索引,索引从0开始 集合元素 $(“inputeven“)选择索引是偶数的input元素
:ODD 选取索引是奇数的所有元素,索引,索引从0开始 集合元素 $(“inputOdd“)选择索引是奇数的input元素
:eq(index) 选取索引等于index的元素(index从0开始) 集合元素 $(“input:eq(1)“)选择索引是奇数的input元素
:gt(index) 选取索引大于index的元素(index从0开始) 集合元素 $(“input:eq(1)“)选择索引是大于1的input元素
:it(index) 选取索引小于index的元素(index从0开始) 集合元素 $(“input:it(1)“)选择索引是小于1的input元素
:header 选取所有的要标题元素,例如h1,h2,h3等等 集合元素 $(“:header”)选取网页中所有<h1><h2><h3>…
:animated 选取当前正在执行动画的所有元素 集合元素 $(“DIV:ANIMATED”)选取正在执行动画的<div>元素
?1
?1 2.内容过滤选择器
?1 规则主要体现在它所包含的子元素或文本内容上。
选择器 描述 返回 示例
:contains(text) 选取含有文本内容为”text“的元素 集合元素 $(“div:contains(“我”)“)选择含量有文本我的div元素
:empty 选取不包含子元素或者文本空元素 集合元素 $(“div:empty”)选取不包含子元素(包括文本元素)的div 空元素
:has(selector) 选取含有选择器所匹配的元素的元素 集合元素 $(“div:has(p)”)选取含有p元素div元素
:Parent 选取含有子素或者文本的元素 集合元素 $(“div:has(p)”)选取拥有p元素(包括文本元素)的<div>元素
?1 3.可见性过滤器
选择器 描述 返回 示例
:hidden 选取所有不可见的元素 集合元素 $(“:hidden”)选取不可见的元素
:visible 选取所有可见的元素 $(“div:visible”)选取所有可见的div元素
?1 4.属性过滤器
选择器 描述 返回 示例
[attribute] 选取拥有此属性的元素 集合元素 $(“div[id]”)选取拥有属性id的元素
attribute=value] 选取属性的值等于value的元素 集合元素 $(“div[title=test]””)选取属性title为”test”的<div>元素
[attribute!=value] 选取属性的值不等于value的元素 集合元素 $(“div[title=test]”]”)选取属性title为”test”的<div>元素
[attribute^=value] 选取拥有此属性的元素 集合元素 $(“div[title^=test]选取属性tile以”test”开始的<div>元素
[attribute$=value] 选取拥有此属性的元素 集合元素 $(“div[title$=test]选取属性tile以”test”开始的<div>元素
[attribute*=value] 选取拥有此属性的元素 集合元素 $(“div[title*=test]选取属性tile含有”test”<div>元素
[selector1][selector2][seelctorN] 用属性选择器合并成一个复合属性选择器,满足多个条件。每选择一次,缩小一交范围 集合元素 $(“div[id][title$=’test’]选取拥有属性id,并且属性title以”test”结否的<div>元素
?1
5.子元素过滤器
只要将父元素和子元素区分清楚,那么使用起来也非常简单,另外还要注意与普通的过滤选择器的区别。
:nth-child(index/even/odd
/equation
选取每个父元素下的第index个子元素或者奇偶元素.(index从1算起
集合元素
:eq(index)只匹配一个元素,而nth-child将为每一个父元素匹配子元素,
:first-child
选取每个父元素的第`1个元素
集合元素
:first返回单个元素,
而first-child选择符将为每个父元素匹配第一个子元素
:last-child
选取每个父元素的最后一个元素
集合元素
同样,:last只返回单个元素,而last-child选择符将为每个父
:only-child
如果某个元素是它父素中惟一的子元素,那么将会匹配。如果父元素中含有其他元素,则不会匹配
集合元素
$(“ul li:onlyu-child)在<ul>中选取是唯一子元素的<li>元素
?1
:nth-child()选择器是很常用的子元素过滤器,祥细功能如下
1.:nth-child(even):选偶元素
2. :nth-child(odd):选奇元素
3. :nth-child(2):选每个父元素下的索引值班等于2的元素
4. :nth-child(3n): 选每个父元素下的索引值班等于3的倍数的元素
5. :nth-child(3n+1)能选取每个父元素下的索引值是(3n+1)元素。(n从0开始)
6.表单对象属性过滤选择器
主要是对所选择的表单元素进行过滤,例如选择被选中的下拉杠,多选择框。
选择器 描述 返回 示 例
:enabled 选取所有可用元素 集合元素 $(“#form1 :enabled”);选取id为
"form1”的表单内的所有可用远素
:disabled 选取所有不可用元素 集合元素 $(“#form2 :disabled”);选取id为
"form2”的表单内的所有可用远
:checked 选取所有被选中的元素(单选框、复选项) 集合元素 $(“input:checked“);选择所有被选择中的<input>元素
:selected 选取所有被选中的选项元素(下拉例表) 集合元素 $(“select:selected”);选取所有被告选中的选项元素
2.3.4 表单选择器
利用这个选择器,能极其方便的获取到表单的某个或某类型的元素
选择器 描述 返回 示例
:input 选取所有的<input><textarea><select><button> 集合元素 $(“.input”)选取所有<input><textarea>、<select><button>
:text 选定取所有的单行文本框 集合元素 $(“:text”)选取所有的单行文本框
:password 选取所有密码框 集合元素 同上
:radio 选取所有的单选框 集合元素 同上
:checkbox 选取所有的多选框 集合元素 同上
:submit 选取所有提交按扭 集合元素 同上
:image 选取所有的图像按钮 集合元素 同上
:reset 选取所有的重置按钮 集合元素 同上
:button 选取所有的按钮 集合元素 同上
:file 选取所有的上传域 集合元素 同上
:hidden 选择所有不可见元素 集合元素 同上
2.4 应用JQuery改写示例
用传统的Javascript方法编写了案3个简单的例子
例1:给网页中所有<p>元素添加onclik 事件
2:使用一个特定表格隔行变色
3:对多选框进行操作,输出选中的多选框的个数
用jQuery选择器重写例子。代码如下。
$(“p”).click(function){
//doing something
}
重写例子2
$(‘#tb tbody tr:even’).css(“backgroudcolor”,”#888”);
//获取id为tb的元素,然后寻找它下的面tbody标签,再寻找tbody下索引
//值是偶数的tr元素
//改变它的背景色
//css(“property”,”value”);用来设置jquery对象的样式
重写例子3
$(“#btn”).click(function(){
var length=$(“input[name=’check’]":checked”).length;
//使用属性选择器,然后用表单对象属性过滤,最后获取jquery对象的长度
alert(“选中的个数为:”+length);
}
2.5 选择器中一些注意事项
1.含有特殊符号的注意事项
2.属性选择器引号问题
3.选择器中含量有空格的注意事项
2.6 案例研究---某网站品牌列表的效果
第一步:设计结构和样式,初始化
<style type="text/css">
*{ margin:0; padding:0;}
body {font-size:12px;text-align:center;}
a { color:#04D; text-decoration:none;}
a:hover { color:#F50; text-decoration:underline;}
.SubCategoryBox {width:600px; margin:0 auto; text-align:center;margin-top:40px;}
.SubCategoryBox ul { list-style:none;}
.SubCategoryBox ul li { display:block; float:left; width:200px; line-height:20px;}
.showmore { clear:both; text-align:center;padding-top:10px;}
.showmore a { display:block; width:120px; margin:0 auto; line-height:24px; border:1px solid #AAA;}
.showmore a span { padding-left:15px; background:url(img/down.gif) no-repeat 0 0;}
.promoted a { color:#F50;}
</style>
</head>
<body>
<div class="SubCategoryBox">
<ul>
<li ><a href="#">佳能</a><i>(30440) </i></li>
<li ><a href="#">索尼</a><i>(27220) </i></li>
<li ><a href="#">三星</a><i>(20808) </i></li>
<li ><a href="#">尼康</a><i>(17821) </i></li>
<li ><a href="#">松下</a><i>(12289) </i></li>
<li ><a href="#">卡西欧</a><i>(8242) </i></li>
<li ><a href="#">富士</a><i>(14894) </i></li>
<li ><a href="#">柯达</a><i>(9520) </i></li>
<li ><a href="#">宾得</a><i>(2195) </i></li>
<li ><a href="#">理光</a><i>(4114) </i></li>
<li ><a href="#">奥林巴斯</a><i>(12205) </i></li>
<li ><a href="#">明基</a><i>(1466) </i></li>
<li ><a href="#">爱国者</a><i>(3091) </i></li>
<li ><a href="#">其它品牌相机</a><i>(7275) </i></li>
</ul>
<div class="showmore">
<a href="more.html"><span>显示全部品牌</span></a>
</div>
</div>
</body>
第二步-隐藏品牌
<!-- 引入jQuery -->
<script src="../../scripts/jquery-1.3.2.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){ //等待DOM加载完毕.
var $category = $('ul li:gt(5):not(:last)');
$category.hide(); // 隐藏上面获取到的jQuery对象。
})
/*
1,$('ul li:gt(5):not(:last)') :
选取ul元素下的li元素的索引值大于5的集合元素后,去掉集合元素中的最后一个。
索引值从0开始。
*/
</script>
第三步-用户点击“显示全部品牌”按钮
<!-- 引入jQuery -->
<script src="../../scripts/jquery-1.3.1.js" type="text/javascript"></script>
<script type="text/javascript" >
$(function(){ // 等待DOM加载完毕.
var $category = $('ul li:gt(5):not(:last)'); // 获得索引值大于5的品牌集合对象(除最后一条)
$category.hide(); // 隐藏上面获取到的jQuery对象。
var $toggleBtn = $('div.showmore > a'); // 获取“显示全部品牌”按钮
$toggleBtn.click(function(){
$category.show(); // 显示$category
$('.showmore a span')
.css("background","url(img/up.gif) no-repeat 0 0")
.text("精简显示品牌"); //改变背景图片和文本
$('ul li').filter(":contains('佳能'),:contains('尼康'),:contains('奥林巴斯')")
.addClass("promoted"); //添加高亮样式
return false; //超链接不跳转
})
})
</script>
第四步- 全部和精简的切换
<!-- 引入jQuery -->
<script src="../../scripts/jquery-1.3.1.js" type="text/javascript"></script>
<script type="text/javascript" >
$(function(){ // 等待DOM加载完毕.
var $category = $('ul li:gt(5):not(:last)'); // 获得索引值大于5的品牌集合对象(除最后一条)
$category.hide(); // 隐藏上面获取到的jQuery对象。
var $toggleBtn = $('div.showmore > a'); // 获取“显示全部品牌”按钮
$toggleBtn.click(function(){
$category.show(); // 显示$category
$('.showmore a span')
.css("background","url(img/up.gif) no-repeat 0 0")
<PRE class="brush: php; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"><!-- 引入jQuery -->
<script src="../../scripts/jquery-1.3.1.js" type="text/javascript"></script>
<script type="text/javascript" >
$(function(){ // 等待DOM加载完毕.
var $category = $('ul li:gt(5):not(:last)'); // 获得索引值大于5的品牌集合对象(除最后一条)
$category.hide(); // 隐藏上面获取到的jQuery对象。
var $toggleBtn = $('div.showmore > a'); // 获取“显示全部品牌”按钮
$toggleBtn.click(function(){
$category.show(); // 显示$category
$('.showmore a span')
.css("background","url(img/up.gif) no-repeat 0 0")
.text("精简显示品牌"); //改变背景图片和文本
$('ul li').filter(":contains('佳能'),:contains('尼康'),:contains('奥林巴斯')")
.addClass("promoted"); //添加高亮样式
return false; //超链接不跳转
})
})
</script>
</PRE> .text("精简显示品牌"); //改变背景图片和文本
$('ul li').filter(":contains('佳能'),:contains('尼康'),:contains('奥林巴斯')")
.addClass("promoted"); //添加高亮样式
return false; //超链接不跳转
})
})
</script>
2.7 其他选择器
1. jQuery提供的选择器的扩展
1.MoreSelectors for jQuery
用于增加更多的选择器,例如.color可以匹配颜射,:colindex可以
匹配表格中的列,:focus可以匹配获取焦点的元素
地址http://plugins.jquery.com/project/moreselectors
2.basic xpath
让用户使用基本的xpath。
地址http://plugins.jquery.com/project/project/xpath.
2.其他使用css选择器的方法
1.document.getelementsbyselector()
通过选择器来获取文档元素。
2.cssQuery()
3.querySelectorAll()
2.8 小结
选择器是行为与文档内容之间连接的纽带,选择器的最终目的是找到文档中的元素