jquery学习(3)--高级选择器
自己手写的学习笔记。常规选择器:
/****************学习--高级选择器(1)****************/
---高级选择器:ie7+
层次选择器:
后代选择器     ul li a    $('ul li a')    获取追溯到的多个dom对象            ie6+=
子选择器     div>p        $('div p')    只获取子类节点的多个dom对象            ie7+
next选择器     div+p{}    $('div+p')    只获取某节点后的同一个同级对象        ie7+
nextAll选择器     div~p{}    $('div~p')    获取某节点后面的所有同级的dom对象    ie7+
在层次选择其中,除了后代选择器外。其他的三种高级选择器不支持ie6的,jquery却是兼容ie6的、
//1.后代选择器--》全兼容
$('#box p').css('color','#666');
//jquery为后代选择器提供了一个等价的find()方法
    $('#box').find('p').css('color','#666');
//2.子选择器,孙子级失效。只支持一层子级(儿子级)。
#box>p{ color:red;}//css代码,不支持ie6
$('#box>p').css('color','orange');//jquery兼容ie6
//jquery为子选择器提供了一个等价children()方法。
    $('#box').children('p').css('color','orange');//和子选择器等价
//3.next选择器(下一个同级节点)
#box+p{ color:red;}//css代码,不支持ie6
$('#box+p').css('color','#bbb');
//jquery为next选择器(下一个同级节点),提供了一个等价next()方法。
    $('#box').next('p').css('color','#bbb');
//4.nextAll选择器(后面的所有同级节点)
#box~p{ color:red;}//css代码,不支持ie6
$('#box~p').css('color','red');//jquery兼容ie6
//jquery为nextAll选择器(后面的所有同级节点),提供了一个等价nextAll()方法。
    $('#box').nextAll('p').css('color','orange');//和子选择器等价
注意:层次选择器对节点的层次都是有要求的,比如子节点才能被选择到,孙子节点和重孙子节点都无法选择到。
    next和nextAll选择器,必须是同一个层次的后一个和后N个,不在同一个层次就无法选取到了。
&&&&&:理论上,jquery提供的find()、children()、next()、
nextAll()运行速度要快于高级选择器。因为他们实现的算法不同,高级选择器是通过“sizzle引擎”解析字符串来获取节点对象。jquery提
供的方法则是通过querySelectorAll()操作直接得到的(ie6/7不支持)。这种快慢差异,对于客户端脚本来说没有太大的实用性,并且速
度差异还要取决于浏览器和选择的元素内容。
在find()、children()、next()、nextAll()这四个方法中,如果不传参数,就相当于传递的是'*',即任何节点,不推荐这
样,这样做不但是会影响性能,而且由于精准度不佳,在复杂的html结构中可能会产生怪异的结果(不是我们想要的效果).
//若'*'在某个环境里有所浪费,那么建议是尽量不要用、
        $('#box').next();相当于$('#box').next('*');
为了补充高级选择器的这三种模式,jquery提供了丰富的方法来选择元素。
        $('#box').prev('p').css('color','orange');//同级上一个元素
        $('#box').prevAll('p').css('color','orange');//同级所有上面的元素
nextUntil()和prevUnitl()方法是选定同级下面或上面的所有节点,选定非指定的所有元素,一旦遇到制定元素就停止选定。
    $('#box').nextUntil('p').css('color','orange');//同级上非指定元素选定,遇到则停止
    $('#box').prevUnitl('p').css('color','orange');//同级下非指定元素选定,遇到则停止
siblings()方法正好集成了prevAll()和nextAll()两个功能的效果,及上线相邻的所有元素进行选定。
    $('#box').siblings('p').css('color','orange');//同级下下所有元素选定。
    //等价于:
    $('box').prevAll('p').css('color','orange');//同级上所有元素选定
    $('box').nextAll('p').css('color','orange');//同级下所有元素选定
/****************学习--高级选择器(2)****************/
理论上,jquery提供的find()、children()、next()、nextAll()运行速度要快于高级选择器。因为他们实现的算法不
同,高级选择器是通过“sizzle引擎”解析字符串来获取节点对象。jquery提供的方法则是通过querySelectorAll()操作直接得到
的(ie6/7不支持)。这种快慢差异,对于客户端脚本来说没有太大的实用性,并且速度差异还要取决于浏览器和选择的元素内容。
在find()、children()、next()、nextAll()这四个方法中,如果不传参数,就相当于传递的是'*',即任何节点,不推荐这
样,这样做不但是会影响性能,而且由于精准度不佳,在复杂的html结构中可能会产生怪异的结果(不是我们想要的效果).
//若'*'在某个环境里有所浪费,那么建议是尽量不要用、
        $('#box').next();相当于$('#box').next('*');
选择器快慢的分析:
原生的getElementById、ByName、ByTagName和jquerySelectorAll()
//这条最快,会使用
$('#box').find('p').css('color','red');
//jquery会自动把下面这条语句转化成$('#box').find('p')這会导致性能损失,它比最快的形式慢了5%-10%。
$('p','#box').css('color','red');
//jquery内部会使用这条语句转成$('#box').find('p'),比最快慢了23%
$('p',$('#parent'));
$('p',$('box')).css('color','red');
//下面这条语句在jquery内部,会使用$.sibling()和javascript的nextSibling()方法,一个个遍历节点。它的形式比最快的大约慢了50%。
$('#box').children('p').css('color','red');
//下面这条语句在jquery内部使用sizzle引擎,处理各种选择器。sizzle引擎的选择顺序是从右到左,所以这条语句是先选P,然后再一个个的过滤出父元素#box,这导致比最快的大约慢70%。
$('#box>p').css('color','red');
//下面的这条语句和上面的是相同的情况,但是,上面的语句$('#box>p');只选择直接的子元素,而下面的這一条语句可以选择多级子元素,所以它的速度更慢,大概比最快的形式慢了77%。
$('#box p').css('color','red');
综上总结:最快的是find()方法,最慢的$('#box p')这中高级选择器。如果一开始将$('#box')进行赋值,那么jquery就对其变量进行缓存,那么速度会进一步提高。
var box = $('#box');
var p = box.find('p);
注
意:推荐使用的哪种呢?其实,都差不多。推荐使用的是jquery提供的方法。因为不但方法速度比高级选择器更快,并且它的灵活性和扩展性要高于高级选择
器。使用'+'或'~'从字面上没有next和nextAll更加语义化,更加清晰,jquery的方法更加丰富,提供了相对的prev和
prevAll。毕竟jquery是编程语言,需要能够灵活的拆分和组合选择器,而css则过于死板。所以,如果jquery提供了独立的方法来代替某些
选择器
功能,我们还是优先推荐使用独立的方法。
/************属性选择器****************/
 css模式            jquery模式                描述
a[title]         $('a[title]')            获取具有这个属性的DOM对象
a[title=num1]     $('a[title=num1]')        获取具有这个属性=这个属性值的DOM对象
a[title^=num]     $('a[title^=numl]')    获取具有这个属性且开头属性值匹配的DOM对象    
a[title|=num]     $('a[title|=numl]')    获取具有这个属性且等于属性值或者开头属性值匹配后面跟一个'-'号的DOM对象    
a[title$=num]     $('a[title$=numl]')    获取具有这个属性且结尾属性值匹配的DOM对象    
a[title!=num]     $('a[title!=numl]')    获取具有这个属性且不等于属性值的DOM对象    
a[title~=num]     $('a[title~=numl]')    获取具有这个属性且属性值是一个空格符分割的列表,其中包含属性值的DOM对象    
a[title*=num]     $('a[title*=numl]')    获取具有这个属性且属性值是一个指定字符串的DOM对象    
a[b][title=num1] $('a[b][title=num1]')获取具有这个属性且属性值匹配的DOM对象
属性选择器也不支持ie6,所以在css界如果要兼容低版本,那么也是非主流。但是jquery却不必考虑这个问题,jquery兼容了ie6.
a[title]{color:red;}        //不支持ie6         
$('a[title]').css('color','red');    //兼容ie6
....
<a bbb='aaa' title="num1">num</a><!--html的写法-->
a[bbb][title=num1]{color:red;}        //不支持ie6    
$('a[bbb][title=num1]').css('color','red');//兼容ie6
jquery学习(3)--高级选择器的更多相关文章
- JQuery学习笔记——层级选择器
		
JQuery学习笔记--层级选择器 上一篇学习了基础的五种选择,分别是id选择器,class选择器,element选择器,*选择器 和 并列选择器.根据手册大纲,这篇学习的是层级选择器. 选择器: 1 ...
 - JQuery学习笔记——基础选择器
		
第一篇博客,现在原生安卓需求不大了.招聘的Android工程师都需要附带更多的其他技术.这也是开启我学习前端之路的开端.前端时间看了HTML.CSS等,在界面渲染这一块,就不多记录博客了.现在学习着J ...
 - jquery 学习日记之选择器
		
看完Jquery选择器的教程视频后,对jquery的选择器有一定的认识和了解,现整理一下知识: 一.jquery基本选择器,这类比较简单,一笔带过. #id 选择器,是选择 匹配id值中的第一个元素 ...
 - jQuery学习笔记(2)-选择器的使用
		
一.选择器是什么 有了jQuery的选择器,我们几乎可以获取页面上任意一个或一组对象 二.Dom对象和jQuery包装集 1.Dom对象 JavaScript中获取Dom对象的方式 <div i ...
 - JQuery学习笔记之选择器
		
JQuery与DOM对象 <div id="test1" class="test2"></div> DOM对象获取方式: var dom ...
 - jQuery学习之过滤选择器
		
基本过滤选择器 :first 选取第一个元素:$("div:first") :last 选取最后一个元素:$("div:last") :not(selector ...
 - jQuery学习笔记——jQuery常规选择器
		
一.简单选择器在使用 jQuery 选择器时,我们首先必须使用“$()”函数来包装我们的 CSS 规则.而CSS 规则作为参数传递到 jQuery 对象内部后,再返回包含页面中对应元素的 jQuery ...
 - jQuery学习之路(1)-选择器
		
▓▓▓▓▓▓ 大致介绍 终于开始了我的jQuery学习之路!感觉不能再拖了,要边学习原生JavaScript边学习jQuery jQuery是什么? jQuery是一个快速.简洁的JavaScript ...
 - jQuery学习笔记(一)jQuery选择器
		
目录 jQuery选择器的优点 基本选择器 层次选择器 过滤选择器 表单选择器 第一次写博客,希望自己能够长期坚持,以写博客的方式作为总结与复习. 最近一段时间开始学习jQuery,通过写一个jQue ...
 
随机推荐
- linode最新试用(购买)流程
			
最新linode官网www.linode.com可以免费试用7天,但是需要你的身份认证 第一步:注册一个linode账号email填写国内的163.126.qq邮箱是不能认证的,这里可以填写gmail ...
 - HTTP请求的基本概念 HTTP请求头和响应头的含义
			
1,HTTP请求的基本概念 TCP/UPD/HTTP *2,HTTP请求头和响应头的含义 请求头: Accept: text/html,image/*(浏览器可以接收的类型) Acc ...
 - 【衡阳八中noip模拟题】国色天香
			
庭前芍药妖无格,池上芙蕖净少情.唯有牡丹真国色,花开时节动京城.——唐·刘禹锡<赏牡丹>芍药花再红终究妖艳无格.终不及牡丹,国色天香.——乌拉那拉氏宜修华妃总是想要用自己的气焰打压皇后,正 ...
 - BF算法(朴素的模式匹配算法)
			
#include <stdio.h> #include <stdlib.h> int Index_BF(char S[],char T[])//s为目标串(长串),t为模式串( ...
 - 读写Excle,不用office环境
			
1.下载NPOI.dll,并添加引用 2.ExcelHelper帮助类,以下为读写的参照方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...
 - mysql explain 命令简解
			
参考官方文档地址: http://dev.mysql.com/doc/refman/5.7/en/explain.html 为什么用explain . 如果你的页面返回结果很慢,你就需要使用expla ...
 - php 数据结构 hash表
			
hash表 定义 hash表定义了一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,称为散列法,也叫哈希法.由于通过更短的哈希值比用原始值进行数据库搜索更快,这种方法一般用来 ...
 - python-凯撒密码
			
凯撒密码 简介:凯撒密码(Caesar)是最早的代换密码,对称密码的一种 算法:将每个字母用字母表中它之后的第k(称作位移值)个字母替代 代码: #-*-coding:utf-8-*- __autho ...
 - Amazon MWS 上传数据 (三) 提交请求
			
前面介绍了设置服务和构造请求,现在介绍提交请求. 上传数据,查询上传操作的工作状态,和处理上传操作返回的报告操作使用的Amazon API 分别为:SubmitFeed(),FeedSubmissio ...
 - DenyHosts安装及配置
			
一.DenyHost简介 DenyHosts是Python语言写的一个程序软件,运行于Linux上预防SSH暴力破解的,它会分析sshd的日志文件(/var/log/secure),当发现重复的攻击时 ...