Javascript Selectors 入门篇
作者:Denis 来源:aliued.com 发布时间:2010-04-12 12:55:00
作为前端开发工程师,平时对于Dom的查找遍历和操作是家常便饭。对于优秀的前端来说,也肯定早已有了自己的一套方法来封装这些重复的操作。但是,现在市面上已经有很多成熟的框架已经提供了这么一套封装的方法来极大地方便我们的工作,而且在浏览器兼容及效率上也各有深入的研究了,我们何不来看看这些解决方案是否好用,从来再次提高我们的工作效率呢?这些解决方案,有一个统一的命名:Javascript Selectors
Selectors长什么样
常用的Selectors
“#ElementId” ID为ElementId
“.ClassName” class包含ClassName
“TagName” Dom标签为TagName
“[AttributeName]” Dom包含属性AttributeName
“(expr1), (expr2)[, (expr3), ...]” 满足表达式1或表达式2或表达式3…
高级的Selectors
“:empty” 空或’/>’结尾的标签
“:first-child” 同类同级别第一个Dom
“:nth-child(odd)” 同类同级别奇数位Dom
“:nth-child(even)” 同类同级别偶数位Dom
“(PreExpr)>(NextExpr)” 直接子节点Dom
“(PreExpr)+(NextExpr)” 同级别紧挨着的Dom
“(PreExpr)~(NextExpr)” 同级别Dom
“[AttributeName=(Value)]” Dom包含属性AttributeName且等于Value
“[AttributeName^=(Value)]” Dom包含属性AttributeName且以Value开头
“[AttributeName$=(Value)]” Dom包含属性AttributeName且以Value结尾
表单中的Selectors
“:checked” 选中状态的表单控件
JS Selectors & CSS Selectors
两者在使用上并没有直接关系。但两者长得很像,并从不同的角度管理着HTML页面上的Dom节点。
JS Selectors通过JS原生的方法或者浏览器支持的方法,结合正则,筛选Dom。
CSS Selectors通过浏览器内置的渲染引擎筛选Dom。
两者最终得到的结果互不相干。
JS Selectors与框架
通俗地说,Selectors引擎是独立的,是作为JS框架的一个组件存在的。
目前有很多引擎,大多没有独立的名字,是跟随JS框架出现的(如YUI,Ext,Dojo)。
jQuery的引擎为Sizzle,目前效率最高的引擎之一。此外还有Peppy。
YUI 2.x的引擎效率惨不忍睹,3.x的效率有了脱胎换骨的优化,是亮点。
IE6下各大框架Selectors的执行效率
怎么用Selectors引擎
其实很简单:
JS Selectors引擎,用山寨的话来解释,那就是:一个返回类型是array的function,它必须包含一个string类型的Selector表达式参数,之后的可选参数等你用段日子再了解也不迟!
YAHOO.util.Selector.query
看到标题了吗?这就是YUI 2.x 中的Selectors引擎所在的命名空间(YAHOO.util.Selector)和方法名(query)。
来看看query这个方法的官方API:
Retrieves a set of nodes based on a given CSS selector.
Parameters:
selector The CSS Selector to test the node against.
root optional An id or HTMLElement to start the query from. Defaults to Selector.document.
firstOnly optional Whether or not to return only the first match.
Returns: Array
An array of nodes that match the given selector.
static Array query ( selector, root, firstOnly)
扩展思维
YUI 2.x 的Selectors引擎效率低,我们能否切换一个效率更高的引擎呢?答案是肯定的!YAHOO.util.Selector.query作为一个静态函数我们可以用更高的引擎来重写它,比如我们用Sizzle的引擎来替换它:
YAHOO.util.Selector.query=Sizzle;
当然我们也可用从YUI 3.x版本中剥离出高效的引擎来重写2.x中的引擎
猜你喜欢
- 四年前写的一个内容管理系统,应用在公司内部网上,昨天DBA说其中的SQL语句未使用参数化的调用,导致服务器负担加重,资源占用大。并列出了几个
- 一、多线程共享全局变量首先我们来回忆下在函数中修改全局变量的情况。在一个函数中,对全局变量进行修改的时候,到底是否需要使用 global 进
- 在Python的网络编程中,getservbyport()函数和getservbyname()函数是socket模块中的两个函数,因此在使用
- 按照ant design vue官方说明,使用日期选择器需要在入口文件(main.js)全局设置语言:// 默认语言为 en-US,如果你需
- 假如页面上有很多条记录,很多情况下,对这些信息按照字母表降序排序会比传统的升序排序显示效率更高。采用你熟悉的ORDER BY 子句,你可以很
- 一、登录以信号与系统课程为例,直接输入网址则出现登录界面:由于学号登录需要验证码,因此选择电话登录:直接在开发者工具中找到手机号输入框、密码
- 最近好多伙伴说,我用vue做的项目本地是可以的,但部署到服务器遇到好多问题:资源找不到,直接访问index.html页面空白,刷新当前路由4
- <?php /* *文件名:linearList.php * 功能:数据结构线性表的顺序存储实现 * author:黎锦焕 * @co
- 这里介绍使用python-Django框架来实现web端分页呈现数据,主要说明对应的views,urls,templates三个文件的编程逻
- 前言最近因为工作需要 用selenium做了一个QQ邮箱的爬虫(登录时部分帐号要滑动解锁),先简单记录一下。这个问题先可以分为两个部分:1.
- 阅读目录• 下载MySQL免安装版• 配置MySQL数据库• MySQL环境变量• 安装MySQL数据库 公司服务器是Window
- 目录什么是 PyMySQL?PyMySQL 安装数据库连接实例:创建数据库表数据库插入操作数据库查询操作数据库更新操作删除操作执行事务错误处
- 无论安装以下哪种库,强烈建议在新环境下安装,之前在base环境下安装各种报错!!!如何在新环境下安装可参见我之前的总结或网上其他文章。不推荐
- 这篇文章主要介绍了python如何实现小程序 无限求和平均,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 首先下载selenium模块,pip install selenium,下载一个浏览器驱动程序(我这里使用谷歌)。#导入#注意python各
- '*************************************************'函数名:getMaxO
- 直方图处理直方图从图像内部灰度级的角度对图像进行表述从直方图的角度对图像进行处理,可以达到增强图像显示效果的目的。直方图的含义直方图是图像内
- 大家先看一下Python os模块中的部分函数python 路径相关的函数 os.listdir(dirname):列出dirname下的目
- 我们熟悉了对象和类的基本概念。我们将进一步拓展,以便能实际运用对象和类。调用类的其它信息上一讲中提到,在定义方法时,必须有self这一参数。
- 前言本篇文章主要讲述了Mac下Redis的安装和使用的经验,并将python如何操作Redis做了简单介绍。1. redis 安装 和启动1