a毛 jquery 学习记 3 常规选择器(3)

jquery 学习 三(3)

参考资料:李炎恢老师的视频 、w3cschool  、锋利的jquery、

3 、高级选择器:

    首先复制上次笔记所有文件到新建的文件夹‘3jquery常规选择器3’中,删除style.css中内容,dom.js中延迟加载中内容,indet.html中<body>中内容;

   先了解一下如下表:

      1、后代选择器

index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
  <title>jquery 常规选择器</title>

	<script type="text/javascript" src="jquery-1.12.2.js"></script>
    <script type="text/javascript" src="dom.js"></script>
	<link rel="stylesheet" href="style.css" type="text/css">
 </head>
 <body>
	  <div id='box'> 
		<p> p </p>
		<p> p </p>
		<p> p </p>
			<div > 
				<p> p </p>
				<p> p </p>
				<p> p </p>
			 </div>
	  </div>
	
 </body>
</html>
把所有节点都变红  dom.js

$(function(){
   $('#box  p').css('color','blue');
});

 jQuery 也提供了一个后代选择器的方法:find() 

$(function(){
  //find()
  $('#box').find('p').css('color','blue');
});
都是可以实现的;
      2、子选择器(只能是儿子的标签部分才能被选择到,孙子 标签部分是选取不到的) 

style.css

#box > p {
    color:red;            //注意 IE6不支持
}
dom.js

$(function(){
   $('#box  > p').css('color','blue');  
});
jQuery 也提供了一个子选择器的方法:children();

$(function(){
    $('#box').children('p').css('color','red');
});
    3、next选择器  下一个节点的选择器  (同级的下一 节点) 
 修改一下index.html,如下

<body>
 
		<p> p1 </p>
		<p> p1 </p>
		<p> p1 </p>
	  <div id='box'>  div  </div>			
		<p> p2 </p>
		<p> p2</p>
		<p> p2 </p>

	
 </body>
style.css  

#box + p  {
	color:blue;   //将div下面的p节点中元素变为红色  注意:IE6不支持此写法</span>
}
如果div 中修改如下,查看效果是否一样?

 <div id='box'>  div	<p> p2 div </p>  </div>			
在试一下上面代码,查看结果发现第一个 " p2 "变成了蓝,所有说必须是: 同级的下一个节点
jQuery中模拟 dom.js

      $(function(){
		$('#box + p').css('color','red');
      });
jQuery 也提供了一个next选择器的方法:next();
$(function(){
		$('#box').next('p').css('color','blue');
	});
同样也可以实现,但是如果在div标签下面增加一个Strong标签呢,如下:

 <body>
 
		<p> p1 </p>
		<p> p1 </p>
		<p> p1 </p>
	  <div id='box'>  div	<p> p2 div </p>  </div>	
		<strong> 同级strong </strong>
		<p> p2 </p>
		<p> p2</p>
		<p> p2 </p>

	
 </body>
运行一下查看效果发现,p2没有变化:所有说必须是: 同级的下一个节点
3、nextAll选择器   (同级的子节点)

style.css

#box ~ p{
   color:red;   //IE6不支持此功能
}
dom.js

$(function(){
		$('#box ~ p').css('color','blue');
	});	
jQuery 也提供了一个nextAll选择器的方法:nextAll();
$(function(){
		$('#box').nextAll('p').css('color','red');//同级下面的N个子节点
	});
        层次选择器对节点的层次都是有要求的,比如子选择器,只有子节点才可以被选择到,孙子节点和重孙子节点都无法选择到。next 和 nextAll 选择器,必须是同一个层次的后一个和后 N 个,不在同一个层次就无法选取到了。

如果在 find()、next()、nextAll()和 children()这四个方法中,如果不传递参数,会怎么样,来做以下试验;

先来看next

$(function(){
		$('#box').next().css('color','red');  //next()等选择器不传参数就等于是传递了'*'
	});	
结果发现 ID下个同级节点strong变为了红色,把<strong>跟<p>标签互换一下位置,发现 p标签变成了红色,所以说 next()等选择器不传参数就等于是传递了'*'
$(function(){
		$('#box').children().css('color','red');
	});	
	$(function(){
		$('#box').nextAll().css('color','red');
	});	
$(function(){
		$('#box').find().css('color','red');   //测试find不带参数发现没有任何反应,但视频上说都有效果,本人感觉	是视频的问题
});	

    find() 意为寻找,如果没有目标怎么找呢……所以我觉得是视频的问题

  经查资料结果发现:find()方法获得当前元素集合中每个元素的后代,通过选择器、jQuery 对象或元素来筛选。根据这意思看似可以不传参数但我实骓多次,没成功

 上面这个问题先放起来,如果有哪位大神研究出来了,可以评论,给点提示,真心的感谢;微笑

  如果*在某个环境里有所浪费,建议尽量不要使用;

jQuery还提供了几如下方法

prev() //同一个等级的上一个节点

	$(function(){
		$('#box').prev('p').css('color','red');  //同一个等级的上一个节点变红
	});
prevAll()  //同一个等级的上N个级点
	$(function(){
		$('#box').prevAll('p').css('color','red');
	});	
如果要把div上下的都显示出来怎么办?看如下方法;

$(function(){
		$('#box').nextAll().css('color','red');
		$('#box').prevAll('p').css('color','red');
	});	
这种写法有点麻烦还可以怎么写,看如下方法

$(function(){
        $('#box').prevAll('p').nextAll('p').css('color','red'); //试验发现这种方法的第一个是没有变颜色的;
    });   
为什么会不变颜色呢?因为prevAll('p')返回的是已经上方所有指定元素,然后再 nextAll('p')选定下方所有指定元素,这样必然出现错误。

为了简便,jQuery也提供了如下方法来显示上下同级所有元素:siblings()

$(function(){
		$('#box').siblings('p').css('color','red');
	});	
jQuery 还提供了更加丰富的方法来选择元素
nextUntil()和 prevUnitl()方法是选定同级的下面或上面的所有节点,选定非指定的所有元素,一旦遇到指定的元素就停止选定。

来做以下试验

index.html做如下修改

 <body>
	 <strong> strong  </strong>
	  <strong> strong  </strong>
	  <strong> strong  </strong>
		
		<p> p1 </p>
	  <strong> strong  </strong>
	  <strong> strong  </strong>
	  <strong> strong  </strong>
	  <div id='box'> div </div>	
	  <strong> strong  </strong>
	  <strong> strong  </strong>
	  <strong> strong  </strong>
		<p> p2 </p>
	
	  <strong> strong  </strong>
	  <strong> strong  </strong>
	  <strong> strong  </strong>
	
 </body>

dom.js

	$(function(){
		 $('#box').prevUntil('p').css('color','red');
		 $('#box').nextUntil('p').css('color','red');
	});	

实验效果:div上下一行都显示为红色







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值