jQuery 选择器项目实例分析及实现代码


Posted in Javascript onDecember 28, 2012

首先废话一句,jQuery选择器真心很强大!
在项目中遇到这么一个问题easyui的问题
jQuery 选择器项目实例分析及实现代码 
如图所示,当前页面显示的是“原始报文查询”的页面,当时左侧导航栏却选中的是“重发报文查询”。如何让右侧的菜单和左侧的导航实现联动即:左侧点击“原始报文查询”,那么右侧的“补发运抵报文”展开,并选中“原始报文查询”,“后台管理”关闭?
实现方式如下
1、右侧的“原始报文查询”等用到的是easyui的tabs控件,查看api知道,tabs有个onSelect方法,只要在onSelect方法中写入自己想做的事情就可以了。
2、触发事件是找到了,那么具体怎么实现想要的效果呢?
jQuery 选择器项目实例分析及实现代码  
左侧导航栏代码结果如上图:最外层是easyui的accordion控件,accordion里有很多pannel,一个pannel对应图1中的一个父目录和其下面的子目录,比如“补发运运抵报告”这一模块。panel里有两个div,
第一个div是父目录,第二个div里包含了很多子目录。
首先实现选中右侧的tabs时,左侧对应的导航条被选中。先取出所有子目录的选中状态,然后让当前子目录被选中。

$('#idaccordion li div').removeClass("selected"); 
$('#idaccordion span:contains("'+title+'")').parent().parent().addClass("selected");

3、问题是该选中的是选中了,但选中的子菜单的父菜单并没有展开。easyui中的panel有个expand方法,但是怎样知道哪个panel(既父菜单)应该展开呢?如图2所示:一直选中了“原始报文查询”,现在要让补发运抵报告这个父菜单展开。“原始报文查询“所在的元素span的祖先节点的兄弟节点的第一个子节点才是”补发运抵报告“所在的节点。
if( $('#idaccordion span:contains("'+title+'")').length > 0 ){ 
var accordionTitle = $('#idaccordion span:contains("'+title+'")').closest('.panel-body').prev().find('.panel-title').text(); 
var p = $('#idaccordion').accordion('getPanel',accordionTitle); 
p.panel('expand'); 
}

首先在id为idaccordion的子孙节点中查找包含文本为title的span(即<span class="icon icon-users"> 原始报文查询</span>),然后找到最近的class为panel-body的祖先节点,然后找到这个节点的前一个兄弟节点(即<div class="panel-header accordion-header accordion-header-selected" style="height: 15px; width: 161px;">),然后找到这个节点的类为panel-title的子节点,就获取到了这个节点的文本,即”补发运抵报告“。
整体代码如下
//当右侧选择某个tab时,左边对应的菜单也被选中,且这个菜单所在的accordion展开,其他的accordion关闭 
$('#tabs').tabs({ 
onSelect:function(title){ 
$('#idaccordion li div').removeClass("selected"); 
$('#idaccordion span:contains("'+title+'")').parent().parent().addClass("selected"); 
if( $('#idaccordion span:contains("'+title+'")').length > 0 ){ 
var accordionTitle = $('#idaccordion span:contains("'+title+'")').closest('.panel-body').prev().find('.panel-title').text(); 
var p = $('#idaccordion').accordion('getPanel',accordionTitle); 
p.panel('expand'); 
} 
} 
});

平时用的比较少的是closest方法,该方法可以获取某个元素最近的父元素,还有一个类似的方法parents,两者的区别如下
parents([expr])
取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素)。可以通过一个可选的表达式进行筛选。
代码如下
$('#items').parents('.parent1'); 
closest([expr])

closest会首先检查当前元素是否匹配,如果匹配则直接返回元素本身。如果不匹配则向上查找父元素,一层一层往上,直到找到匹配选择器的元素。如果什么都没找到则返回一个空的jQuery对象。
$('#items1').closest('.parent1');

closest和parents的主要区别是:1,前者从当前元素开始匹配寻找,后者从父元素开始匹配寻找;2,前者逐级向上查找,直到发现匹配的元素后 就停止了,后者一直向上查找直到根元素,然后把这些元素放进一个临时集合中,再用给定的选择器表达式去过滤;3,前者返回0或1个元素,后者可能包含0 个,1个,或者多个元素。
closest对于处理事件委派非常有用。
Javascript 相关文章推荐
javascript 避免闭包引发的问题
Mar 17 Javascript
jQuery 方法大全方便学习参考
Feb 25 Javascript
iframe 父窗口和子窗口相互的调用方法集锦
Dec 15 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
Jan 09 Javascript
JQuery onload、ready概念介绍及使用方法
Apr 27 Javascript
简单的ajax连接库分享(不用jquery的ajax)
Jan 19 Javascript
javascript实现数字+字母验证码的简单实例
Feb 10 Javascript
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
Jun 21 Javascript
node.js连接MongoDB数据库的2种方法教程
May 17 Javascript
js禁止Backspace键使浏览器后退的实现方法
Sep 01 Javascript
seajs模块压缩问题与解决方法实例分析
Oct 10 Javascript
jQuery使用each遍历循环的方法
Sep 19 jQuery
jQuery插件-jRating评分插件源码分析及使用方法
Dec 28 #Javascript
JS声明变量背后的编译原理剖析
Dec 28 #Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
Dec 28 #Javascript
2012年开发人员的16款新鲜的jquery插件体验分享
Dec 28 #Javascript
web性能优化之javascript性能调优
Dec 28 #Javascript
javascript的字符串按引用复制和传递,按值来比较介绍与应用
Dec 28 #Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
Dec 28 #Javascript
You might like
PHP $_SERVER详解
2009/01/16 PHP
php disk_free_space 返回目录可用空间
2010/05/10 PHP
php 生成唯一id的几种解决方法
2013/03/08 PHP
php.ini 配置文件的深入解析
2013/06/17 PHP
thinkPHP模板引擎用法示例
2016/12/08 PHP
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
PHP接入支付宝接口失效流程详解
2020/11/10 PHP
张孝祥JavaScript学习阶段性总结(2)--(X)HTML学习
2007/02/03 Javascript
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
javascript实现颜色渐变的方法
2013/10/30 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
2016/09/23 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
2016/11/10 Javascript
解析js如何获取css样式
2016/12/11 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
深入理解vue-loader如何使用
2017/06/06 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
浅谈Vue SPA 首屏加载优化实践
2017/12/15 Javascript
深入理解Vue router的部分高级用法
2018/08/15 Javascript
小程序云开发之用户注册登录
2019/05/18 Javascript
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
在Vue中使用Echarts实例图的方法实例
2020/10/10 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
Python实现基本数据结构中队列的操作方法示例
2017/12/04 Python
使用sklearn之LabelEncoder将Label标准化的方法
2018/07/11 Python
python爬取网易云音乐评论
2018/11/16 Python
Python反爬虫技术之防止IP地址被封杀的讲解
2019/01/09 Python
在Pycharm中自动添加时间日期作者等信息的方法
2019/01/16 Python
对Python Pexpect 模块的使用说明详解
2019/02/14 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
西班牙土拨鼠床垫公司,感觉在云端:Marmota
2019/03/18 全球购物
学生发电厂实习自我鉴定
2013/09/22 职场文书
业务总经理岗位职责
2014/02/03 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
Go语言使用select{}阻塞main函数介绍
2021/04/25 Golang