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 相关文章推荐
Ajax::prototype 源码解读
Jan 22 Javascript
javascript里模拟sleep(两种实现方式)
Jan 25 Javascript
JavaScript中使用Object.prototype.toString判断是否为数组
Apr 01 Javascript
Javascript实现快速排序(Quicksort)的算法详解
Sep 06 Javascript
一道常被人轻视的web前端常见面试题(JS)
Feb 15 Javascript
JS判断iframe是否加载完成的方法
Aug 03 Javascript
对javascript继承的理解
Oct 11 Javascript
angular-ui-sortable实现可拖拽排序列表
Dec 28 Javascript
Angular2中如何使用ngx-translate进行国际化
May 21 Javascript
Vue.js常用指令的使用小结
Jun 23 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
Feb 28 Javascript
JavaScript DOM常用操作代码汇总
Jul 03 Javascript
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
附件名前加网站名
2008/03/23 PHP
一个PHP的ZIP压缩类分享
2014/05/04 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
修改jQuery.Autocomplete插件 支持中文输入法 避免TAB、ENTER键失效、导致表单提交
2009/10/11 Javascript
jquery.validate分组验证代码
2011/03/17 Javascript
js原生appendChild的bug解决心得分享
2013/07/01 Javascript
Javascript中call的两种用法实例
2013/12/13 Javascript
jQuery中on()方法用法实例
2015/01/19 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
2020/06/23 Javascript
EasyUI加载完Html内容样式渲染完成后显示
2016/07/25 Javascript
详解js前端代码异常监控
2017/01/11 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
js实现会跳动的日历效果(完整实例)
2017/10/18 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
使用Vue组件实现一个简单弹窗效果
2018/04/23 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
2019/11/24 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
详解ES6 CLASS在微信小程序中的应用实例
2020/04/24 Javascript
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
python实现挑选出来100以内的质数
2015/03/24 Python
Python中with及contextlib的用法详解
2017/06/08 Python
Python实现决策树并且使用Graphviz可视化的例子
2019/08/09 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
Django Path转换器自定义及正则代码实例
2020/05/29 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
通过实例解析Python文件操作实现步骤
2020/09/21 Python
教育学专业毕业生的自我评价
2013/11/21 职场文书
房产继承公证书
2014/04/09 职场文书
同意离婚答辩状
2015/05/22 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
大学生创业计划书
2019/06/24 职场文书
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python