lwcompany

功到自然成

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

2.1 JQuery选择器是什么

       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;
}
例如要使所有class为demo的<p>元素里的字体加粗,可以直接在<style>里编写,而不需要去网页里寻找所有clss为DEMO的<p>元素逐个添加样式。代码如下:
<style>
.demo{
   color:red;
   font-size:30px;
   font-weight:bold; //字体加粗
}
</style>
<p class="demo"> css demo.</p>
      2.JQuery选择器
      jQuery中的选择器完全不继承了css的风格,可以非常便捷和快速地找出特定的DOM元素,然后为它们添加相应的行为,选择器是学习JQuery的基础,jQery的行为规则都是在获取到元素后才能生效。
<script type="text/javascript">
    function demo(){
    alert("javascript demo.");
   }
</script>
<p onclick="demo();">点击我.</p>
    像上面这样把javascript代码和html代码混杂在一下很不妥,因为它没有将网页和行为分离,建议使用下面的方法,
<p class="demo">jquery demo</p>
<script type="text/javascript">
    $(".demo").click(function(){
      alert("jquery demo!");
    })
</script>
     可以对css的写法和jquery的写法进行比较
     css获取至元素的代码如下
      .demo{
      …                    //给class为demo的元素添加样式
       }
     jQuery获取到元素的代码如下:
      $(“.demo”{        //给class为demo的元素添加行为
      ….. 
      }
2.2 jQuery选择器的优势
     1.简洁的写法
     2.支持css1到css3选择器
     3.完善的处理机制
     
2.3 jQuery选择器
        先看几组用传统的javascript方法获取页面元素,然后给元素添加行事件的例子。
        例1 :给网页中的所有<p>元素添加onclick事件
        html代码如下:
         <p>测试1</p>
         <p>测试2</p>      
        要做的工作有以下几项。
         1.获取所有<p>元素。
         2.对<p>元素进行循环(因为获取的是数组对象)
         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>
 
         例2:使一个特定的表格隔行变色。
          要作的工作有几项:
          1.根据表格id获取表格
          2.在表格内获取<tbody>元素
          3.在<tbody>元素下获取<tr>元素
          4.循环输出获取的<tr>元素
          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>
          上面是传统的javascript方法乾地操作,中间使用了getelemetnbyid()、getelementsbytagname()和getelementsbyname()等方法,然后动态地给元素添加行为或样式。还不断重复使用getelementbyid和
getelementsbytagname()等冗长难记的名称,开发人员开始厌倦这种写未能。然而JQuery中,类似的这些操作则是非常简洁.
          下面学习如何使用jquery获取这些元素。
      jquery选择器分为基本选择器、层次选择器、过滤选择器和表单选择器。
      2.3.1 基本选择器
         基本选择器是JQuery中最常用的选择器,也是最简单的选择器,它通过元素id、class、标签名来查找DOM元素。
         在网页中,每个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>标签的一组元素
               选择器的示例:
 <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>
  2.3.2 层次选择器
      如果想通DOM元素之间的层资来获取特定元素,例如后代元素、子元素,
相邻元素和兄弟元素等,那么层次选择器是一个非常好的选择。
选择器 描述 返回 示例
$(“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>兄弟元素
 
  2.3.3 过滤选择器
    过滤器规则来筛选出所需的DOM元素,过滤规则与css中的伪类选择器语法相同,以:开头。过滤选择器可以分为基本过滤、内容过滤、可见性过滤、属性过滤、子元素过滤和表单对象属性过滤
             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>元素
 
  2.内容过滤选择器
             规则主要体现在它所包含的子元素或文本内容上。
选择器 描述 返回 示例
:contains(text) 选取含有文本内容为”text“的元素 集合元素 $(“div:contains(“我”)“)选择含量有文本我的div元素
:empty 选取不包含子元素或者文本空元素 集合元素 $(“div:empty”)选取不包含子元素(包括文本元素)的div 空元素
:has(selector) 选取含有选择器所匹配的元素的元素 集合元素 $(“div:has(p)”)选取含有p元素div元素
:Parent 选取含有子素或者文本的元素 集合元素 $(“div:has(p)”)选取拥有p元素(包括文本元素)的<div>元素
  3.可见性过滤器
选择器 描述 返回 示例
:hidden 选取所有不可见的元素 集合元素 $(“:hidden”)选取不可见的元素
:visible 选取所有可见的元素   $(“div:visible”)选取所有可见的div元素
       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>元素
 

          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>元素

 

         :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 案例研究---某网站品牌列表的效果

          品牌PNG

          

         品牌PNG2

                  第一步:设计结构和样式,初始化

<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")      
<!-- 引入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>
.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 小结

          选择器是行为与文档内容之间连接的纽带,选择器的最终目的是找到文档中的元素        

posted on 2011-08-09 14:14  平渡飞扬  阅读(1337)  评论(1编辑  收藏  举报