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 相关文章推荐
(jQuery,mootools,dojo)使用适合自己的编程别名命名
Sep 14 Javascript
web前端开发也需要日志
Dec 09 Javascript
JavaScript 原型继承之构造函数继承
Aug 26 Javascript
js自定义事件及事件交互原理概述(二)
Feb 01 Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
Sep 01 Javascript
jQuery 的 ready()的纯js替代方法
Nov 20 Javascript
Bootstrop实现多级下拉菜单功能
Nov 24 Javascript
浅谈js数组和splice的用法
Dec 04 Javascript
jQuery+ajax实现局部刷新的两种方法
Jun 08 jQuery
React学习笔记之事件处理(二)
Jul 02 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
Feb 22 Javascript
vue滚动tab跟随切换效果
Jun 29 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
肝肠寸断了解下!盘点史上最伤心的十大动漫
2020/03/04 日漫
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
php foreach循环中使用引用的问题
2013/11/06 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
让焦点自动跳转
2006/07/01 Javascript
Javascript表达式中连续的 &amp;&amp; 和 || 之赋值区别
2010/10/17 Javascript
Javascript base64编码实现代码
2011/12/02 Javascript
JS跨域代码片段
2012/08/30 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
js 获取元素所有兄弟节点的实现方法
2016/09/06 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
extjs简介_动力节点Java学院整理
2017/07/17 Javascript
Angular通过angular-cli来搭建web前端项目的方法
2017/07/27 Javascript
JavaScript表单即时验证 验证不成功不能提交
2017/08/31 Javascript
Vue2.0 http请求以及loading展示实例
2018/03/06 Javascript
AngularJS上传文件的示例代码
2018/11/10 Javascript
Python中的特殊语法:filter、map、reduce、lambda介绍
2015/04/14 Python
教你用Python脚本快速为iOS10生成图标和截屏
2016/09/22 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
Django项目实战之用户头像上传与访问的示例
2018/04/21 Python
TensorFlow实现iris数据集线性回归
2018/09/07 Python
Django REST framework 视图和路由详解
2019/07/19 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
css3气泡 css3关键帧动画创建的动态通知气泡
2013/02/26 HTML / CSS
国际礼品店:GiftsnIdeas
2018/05/03 全球购物
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
Linux上比较文件的命令都有哪些
2012/02/24 面试题
《灰椋鸟》教学反思
2014/04/27 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
企业投资意向书
2015/05/09 职场文书
奶茶店的创业计划书该怎么写?
2019/07/15 职场文书