当前位置: 首页 > 编程日记 > 正文

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

转载于:https://www.cnblogs.com/aure/p/4798222.html

相关文章:

h5 返回上一页并且刷新页面

window.history.go(-1) 和 window.history.back(-1) 都用了&#xff0c;安卓会刷新&#xff0c;IOS系统不刷新&#xff08;IOS会读取浏览器缓存&#xff09; 下面用了一种比较low的方法&#xff0c;但是好歹实现了。。 //home.html localStorage.setItem(homeHref,window.loc…

kotlin中的异常处理_如何使用assertFailsWith在Kotlin中测试异常

kotlin中的异常处理by Daniel Newton丹尼尔牛顿 如何使用assertFailsWith在Kotlin中测试异常 (How to test exceptions in Kotlin with assertFailsWith) I wanted to write this short post to highlight the assertFailsWith function available to Kotlin. This function m…

学习dubbo框架的问题

InputStream &#xff1a; 是所有字节输入流的超类&#xff0c;一般使用它的子类&#xff1a;FileInputStream等&#xff0c;它能输出字节流&#xff1b;InputStreamReader &#xff1a; 是字节流与字符流之间的桥梁&#xff0c;能将字节流输出为字符流&#xff0c;并且能为字节…

Android 控件 之 Menu 菜单

http://www.cnblogs.com/Mrs-cc/archive/2012/07/21/2603042.html 1.OptionsMenu &#xff08;选项菜单&#xff09;用法总结使用方法&#xff1a;方法一&#xff1a;添加菜单项&#xff1a;onCreateOptionsMenu&#xff08;Menu menu&#xff09;中添加menu.add(Menu.NONE,Men…

VUE保存页面的数据,VUE页面显示就执行某个函数,VUE页面隐藏就执行某个函数

用 VUE 默认的 keep-alive 组件实现 保存页面的数据,页面显示就执行某个函数&#xff0c;页面隐藏就执行某个函数实现方式&#xff1a; 1.在路由内设置页面是否需要缓存&#xff1b; 示例代码&#xff1a;&#xff08;在需要的组件里面添加meta 对象&#xff0c;keepAlive属…

npm i和npm_让您的NPM套件包含Jest和Codecov☂️

npm i和npmby Carl-Johan Kihl卡尔约翰基尔(Carl-Johan Kihl) 让您的NPM套件包含Jest和Codecov☂️ (Get your NPM-package covered with Jest and Codecov ☂️) 介绍 (Introduction) Let’s talk about code coverage, and how you can do coverage reports in Jest and Cod…

分页传页数的方法

<!DOCTYPE html><html> <head> <meta charset"UTF-8"> <title></title> </head> <body> <div> <span id"num">1</span> <button id"prev">上一页</button> <…

VUE input唤起键盘 底部固定的标签被顶上去解决办法

通过输入框的失去焦点事件和点击事件&#xff0c;当出现键盘时把绝对定位的底部文字隐藏&#xff0c;失去焦点&#xff08;键盘隐藏的时候&#xff09;显示底部文字 解决代码 <input type"text" class"weui-input" click"input_click" blur…

unity中摄像机的控制---调整摄像机,不让他摔倒

摄像机大部分人都会控制&#xff0c;最明显的就是让他旋转&#xff0c;随着鼠标的左右上下移动而旋转&#xff0c;但是总是会遇到一个问题&#xff0c;就是转着转着就仿佛他自己摔倒了似的&#xff0c;其实就是它本身绕着Z轴旋转了 这样就不是我们想要的结果了 要想解决也简单&…

java正则表达式课程_通过此免费课程学习正则表达式

java正则表达式课程by Beau Carnes通过博卡恩斯 通过此免费课程学习正则表达式 (Learn Regular Expressions with this free course) “Some people, when confronted with a problem, think ‘I know, I’ll use regular expressions.’ Now they have two problems.” -Jami…

Codeforces Round #370 (Div. 2)

A - Memory and Crow 这题我没看题意&#xff0c;看了样例猜了一下就AC了&#xff0c;题目好像还挺复杂的。 #include<bits/stdc.h> using namespace std; int a[100005]; int main() {int n;cin>>n;for(int i1;i<n;i) scanf("%d",&a[i]);for(int…

pat1004. Counting Leaves (30)

1004. Counting Leaves (30) 时间限制400 ms内存限制65536 kB代码长度限制16000 B判题程序Standard作者CHEN, YueA family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child. Input Each input file contains…

css 引用字体

最近遇到个问题&#xff0c;页面使用的字体要用PingFangSC字体&#xff0c;引入方法如下&#xff1a; 简单介绍下PingFangSC字体&#xff1a; &#xff08;1&#xff09;苹方-简 常规体 font-family: PingFangSC-Regular, sans-serif; &#xff08;2&#xff09;苹方…

系统技术方案 系统构架_构架系统时应注意的事项

系统技术方案 系统构架by Ayelet Sachto通过Ayelet Sachto 架构系统时要记住的6件事 (6 Things to keep in mind when architecting a system) Architecture may sound like a “scary ” or overwhelming subject, but actually, applying logic and approaching the problem…

[LeetCode] Add Digits

Given a non-negative integer num, repeatedly add all its digits until the result has only one digit. For example: Given num 38, the process is like: 3 8 11, 1 1 2. Since 2 has only one digit, return it. 分析一&#xff1a;最简单的循环方法 class Solutio…

vue 点击事件执行多次

把 click 改成 click.once 就可以了 示例代码 click.once"down" 这样有一个弊端&#xff0c;就是事件只执行一次就不再执行了&#xff0c; 另一种方式&#xff0c;做一个定时器 //默认设置dddown为 true if(that.dddown){that.dddown falsesetTimeout(function(…

如何以及为什么使用Android Visibility Listeners

The Android UI is built up from Views, and in a regular application, there are usually several of them. To find out which View the user is currently looking at, you need to install Visibility Listeners.Android UI是从Views构建的&#xff0c;在常规应用程序中&…

在vue中使用Element-UI

Element-UI是一套基于Vue2.0的UI组件库&#xff0c;http://element.eleme.io/#/zh-CN/component/carousel 首先npm install element-ui --save 然后在main.js中引入&#xff1a; import Vue from vue import ElementUI from element-ui import element-ui/lib/theme-default/in…

Flex布局教程(来源:阮一峰)

网页布局&#xff08;layout&#xff09;是 CSS 的一个重点应用。Flex 布局将成为未来布局的首选方案。本文介绍它的语法&#xff0c;下一篇文章给出常见布局的 Flex 写法。网友 JailBreak 为本文的所有示例制作了 Demo&#xff0c;也可以参考。 以下内容主要参考了下面两篇文…

ibatis的there is no statement named xxx in this SqlMap

报错情况如下&#xff1a;com.ibatis.sqlmap.client.SqlMapException: There is no statement named Control.insert-control in this SqlMap. at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.getMappedStatement(SqlMapExecutorDelegate.java:231)at com.ibatis.sq…

javascript案例_如何在JavaScript中使用增强现实-一个案例研究

javascript案例by Apurav Chauhan通过Apurav Chauhan 如何在JavaScript中使用增强现实-一个案例研究 (How to use Augmented Reality with JavaScript — a case study) In this experiment, I talk about how Augmented Reality with JS can be used to make learning more f…

久未更 ~ 一之 —— 关于ToolBar

很久没更博客了&#xff0c;索性开一个久未更 系列 > > > > > 久未更 系列一&#xff1a;关于ToolBar的使用(后续补充) 1 //让 ToolBar 单独使用深色主题 使得 toolbar 中元素 变为淡色 2 android:theme"style/ThemeOverlay.AppCompat.Dark.ActionBar"…

SQLServer怎样把本地数据导入到远程服务器上(转载)

平常用到mssql时间比较少&#xff0c;总是过一段时间就忘记应该怎么操作了。当要做mssq把本地数据导入到远程服务器的时候&#xff0c;就去网上搜索很久都没有图解的&#xff0c;所以今天自己收集一下免得下次又到处去找。希望对自己&#xff0c;同时对其它需要的人都有一定的帮…

input 默认样式的修改

/* 修改input选中的默认边框样式 */ outline: none; /* 修改input的选中时的光标颜色 */ caret-color:red; /* 修改input的选中时的默认边框 */ border: none; /* 修改input的提示文字的默认样式 */ input::-webkit-input-placeholder{color:#d0d0d0;}

巨石加密_点餐:如何吃一个可怕的巨石

巨石加密by Alan Ridlehoover通过艾伦里德尔霍弗 点餐&#xff1a;如何吃一个可怕的巨石 (Ordering Take Out: How to Eat a Scary Monolith) Martin Fowler said:马丁福勒(Martin Fowler) 说 &#xff1a; Almost all the successful microservice stories have started wit…

Halcon学习之六:获取Image图像中Region区域的特征参数

area_center_gray ( Regions, Image : : : Area, Row, Column ) 计算Image图像中Region区域的面积Area和重心&#xff08;Row&#xff0c;Column&#xff09;。 cooc_feature_image ( Regions, Image : : LdGray, Direction : Energy,Correlation, Homogeneity, Contrast ) …

dos下命令行执行程序时候注意程序所使用文件的路径问题

dos下命令行执行程序时候&#xff0c;最好是用cd命令先切换到程序所在目录下&#xff0c;这样就不会出现文件找不到的问题&#xff0c;如果由于特殊原因&#xff0c;不使用cd命令&#xff0c;而只使用路径命令时候程序中访问的资源也只能是改成绝对路径了&#xff0c;这样对有源…

Vant 使用之Toast Vant安装和使用

Vant 是一个VUE 的移动端组件库&#xff0c;里面有很多好用的组件。 第一步&#xff0c;安装和配置 Vant npm i vant -S npm i babel-plugin-import -D 安装完成之后&#xff0c;在项目 .babelrc 文件修改配置 plugins "plugins": [["import", {"…

15-5重构_重构-糟糕,我一直在向后做。

15-5重构by Justin Fuller贾斯汀富勒(Justin Fuller) 重构-糟糕&#xff0c;我一直在向后做。 (Refactoring — oops, I’ve been doing it backwards.) Welcome to my intervention. I’m a refactoring addict and I’m not afraid to admit it, but there’s only one prob…

JPush 使用教程

JPush 使用教程 自己使用的一些经验&#xff0c;为了方便直接从这里复制过去就行。 就当做个笔记&#xff0c;防止长时间忘记之后&#xff0c;还需要去官网看文档。 主要思路&#xff1a; sdk文件 三方依赖系统库 头文件 添加代理 初始化代码 1.版本信息 JPush : 2.2.0 Xco…