利用jQuery.expr创建一个自己的伪类选择器
2017-07-03 14:18
363 查看
前段时间看到一段jQuery代码,代码里面用到了jQuery.expr这个对象。完全陌生又木有。翻了下jQuery的官方文档,没找到关于这个对象的解释,不过搜寻了一番过后终于在jQuery的选择器引擎——sizzle的文档里找到了线索。如果没猜错的话,这个对象应该是Sizzle.selectors对象的扩展。其实要验证这一点非常简单,我们把两个对象分别console.log出来对比下就知道了。页面引入jQuery和sizzle,在控制台输入如下代码:
![](http://img.blog.csdn.net/20170703141359001?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzYyNjM2MDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
可以看到,jQuery.expr对象除了比Sizzle.selectors对象多了一个’::’属性,其余属性一模一样(’::’属性里包含了jQuery中已经定义好的各种伪类选择器,如:’:first’、’:checked’..)。
所以,我们可以利用这一点在jQuery里扩展选择器,定义出我们自己的选择器,这里简单举个例子,更多的用法可以参照Sizzle的官方文档依葫芦画瓢用到jQuery里就行了。
这里用了$.expr.createPseudo方法,同样,该方法的用法在sizzle的文档里也有很详细的解释和示例,大家有兴趣的话可以移步去看看。
好了,以上是本人对$.expr对象的认识,如果有理解不到位的地方,欢迎指正。
console.log('Sizzle.selectors',Sizzle.selectors); console.log('jQuery.expr',$.expr);
可以看到,jQuery.expr对象除了比Sizzle.selectors对象多了一个’::’属性,其余属性一模一样(’::’属性里包含了jQuery中已经定义好的各种伪类选择器,如:’:first’、’:checked’..)。
所以,我们可以利用这一点在jQuery里扩展选择器,定义出我们自己的选择器,这里简单举个例子,更多的用法可以参照Sizzle的官方文档依葫芦画瓢用到jQuery里就行了。
HTML: <p class="contain">about how to define a new pseudo selector</p> <p class="contain">do not contain</p> <p class="contain">do not contain</p>
JS: //这里定义了一个icontain自定义伪类,作用是找到包含特定文本的节点 $.expr.pseudos.icontain = $.expr.createPseudo(function(arg) { return function(elem) { return (elem.textContent || elem.innerText || jQuery(elem).text() || '') .toLowerCase() .indexOf(arg.toLowerCase()) >= 0; }; }); console.log($('.contain:icontain(pseudo)').length); //输出 1(只有第一个P标签包含了文本pseudo)
这里用了$.expr.createPseudo方法,同样,该方法的用法在sizzle的文档里也有很详细的解释和示例,大家有兴趣的话可以移步去看看。
好了,以上是本人对$.expr对象的认识,如果有理解不到位的地方,欢迎指正。
相关文章推荐
- Github网站加载不完全,响应超时,如何解决 Github是一个代码托管平台和开发者社区,开发者可以在Github上创建自己的开源项目并与其他开发者协作编码。毫不夸张地说,高效利用Github是一
- 小教程:自己创建一个jQuery长阴影插件
- jQuery.expr[':'].Contains自定义伪类选择器
- sqlite_test自己利用jdbc创建一个关系型数据库 实现增删改查
- 利用HTML5与jQuery技术创建一个简单的自动表单完成
- 利用HTML5与jQuery技术创建一个简单的自动表单完成
- 小教程:自己创建一个jQuery长阴影插件
- jquery之利用ajax与服务器交谈(温习ajax之创建一个XHR实例)
- 利用jQuery的ajax得到的数据动态创建树,然后点击数节点,把对应的节点的节点信息赋值给某一个div,是上一篇的升级版
- 利用Win32的网络函数创建一个网络浏览器
- 利用Win32的网络函数创建一个网络浏览器
- 利用Win32的网络函数创建一个网络浏览器
- 如何利用C++ Builder 5.0 Enterprise 创建用户自己的网上聊天程序
- 如何利用C++ Builder 5.0 Enterprise 创建用户自己的网上聊天程序
- 利用Win32的网络函数创建一个网络浏览器
- 如何利用C++ Builder 5.0 Enterprise 创建用户自己的网上聊天程序
- 如何利用C++ Builder 5.0 Enterprise 创建用户自己的网上聊天程序
- 如何利用C++ Builder 5.0 Enterprise 创建用户自己的网上聊天程序
- 如何利用C++ Builder 5.0 Enterprise 创建用户自己的网上聊天程序
- 利用Visual C#.net 创建一个DTS 自定义的任务