博客
关于我
自定义JS事件中快速选择指定dom
阅读量:581 次
发布时间:2019-03-11

本文共 2800 字,大约阅读时间需要 9 分钟。

1. 描述

 

帆软报表中 控件的事件功能非常强大,能够通过自定义 js 做出非常匠心独具的效果,在本文档中搜索 “JS实现” 就可以看到通过自定义 js 可以获得非凡的扩展性。

 

2. 问题

但是 js 对于大多数非程序员或者报表制作业务人员来说是不熟悉的,需要额外的学习成本,尤其是 jQuery 选择器。而报表设计制作中的 自定义 js 事件,又非常需要获取指定的 dom 完成绑定事件或者修改属性的操作。因此,本文档帮助你快速选择指定 dom,完整自定义 js 的设计。

 

3. 准备

 

设计器和 Chrome 浏览器(最好是最新版本或者符合当前报表系统浏览需求的版本)。

 

4. 步骤

为了能有具体情况说明,我们拿 这个  例子作为说明。

 

4.1 报表设计

 

依据  中的操作,并制作完成其中3.2报表设计中的1,2,3 步。

 

4.2 JS 脚本中快速获取相关dom

1)通过上文准备好的 Chrome 浏览器预览模板,在 Chrome 浏览器中通过 F12 键 或者 Ctrl+Shift+I 快捷键 或者 设置中更多工具>开发者工具中打开 开发者工具窗口,如下图所示。

2)进入 dom 选定状态

首先点击 上图中 A 框中的 ELements,切换成 Elements 界面,然后点击 图中 B 框中的 图标,进入 do'm 选择状态。 在此状态下,鼠标悬浮在页面中的元素上时,会在鼠标所在位置上方显示改元素的一些信息,比如上图中,鼠标悬浮在 “修理厂” 这个 tab 按钮上,在“修理厂”上方,显示了这个元素是 div, 他的 类属性 class 是 fr-widget-click , 大小时 57 x 31。

3)在需要获取的 dom 上 单击

在需要获取的 dom 上单击之后,Elements 中自动选中了该dom 。如下图红框部分所示。

注:也可以直接在 Elements 上下选择,通过观察元素是否被选中来当前选中的 dom 节点是否是需要的。(推荐)

4)获取 dom 所对应的选择器

鼠标移至Elements 中被选中的 dom。在其上面右键,选择Copy > Copy selector,点击 Copy selector. 这时,该 dom 的选择器已经复制到剪贴板中,在设计器 js 脚本编辑器 中进行粘贴 就可以使用了。如下图:

在这个示例中,我选中的dom 即 “修理厂” 的 选择器是 

body > div.content-container.fr-quick-border-layout.ui-state-enabled > div > div > div > div.fr-quick-border-layout.ui-state-enabled > div.fr-horizontalboxlayout.ui-state-enabled > div:nth-child(2) > div

注:虽然它很长,但是它是非常精确的,是可以使用的。

通过 

$('body > div.content-container.fr-quick-border-layout.ui-state-enabled > div > div > div > div.fr-quick-border-layout.ui-state-enabled > div.fr-horizontalboxlayout.ui-state-enabled > div:nth-child(2) > div')

就可以使用他了。

通过同样的方式,我们可以完成  中 js 的编写。

最终得到:

setTimeout(function () {    $("body > div.content-container.fr-quick-border-layout.ui-state-enabled > div > div > div > div.fr-quick-border-layout.ui-state-enabled > div.fr-horizontalboxlayout.ui-state-enabled > div:nth-child(2) > div")        .bind("click", function () {            $('body > div.para-container.fr-quick-border-layout.ui-state-enabled > div:nth-child(2) > div > div:nth-child(2)').show();            $('body > div.para-container.fr-quick-border-layout.ui-state-enabled > div:nth-child(2) > div > div:nth-child(3)').show();        });    $("body > div.content-container.fr-quick-border-layout.ui-state-enabled > div > div > div > div.fr-quick-border-layout.ui-state-enabled > div.fr-horizontalboxlayout.ui-state-enabled > div:nth-child(1) > div").bind("click", function () {        $('body > div.para-container.fr-quick-border-layout.ui-state-enabled > div:nth-child(2) > div > div:nth-child(2)').hide();        $('body > div.para-container.fr-quick-border-layout.ui-state-enabled > div:nth-child(2) > div > div:nth-child(3)').hide();    });}, 100);

由于得到的 js 代码是比较长的,因此最好事先在文本编辑器中进行编辑,然后复制粘贴到设计器的 js 脚本编辑器中。

 

5. 注意事项

 

1) 获取得到选择器很长

虽然很长,但是是非常准确的,对于无太多 js 知识的模板制作者来说,这个是很合适的。

而且,由于不清楚预览后生成的具体 dom 信息规律,因此,这种方式非常简单直接。

2.)由于是通过 Chrome 帮助获取的。因此在 主流的现代浏览器 上预览是没有问题的,但是在 一些低版本 IE 上面 可能会出现问题。请谨慎使用该方法。

主题: 

转载地址:http://qrqvz.baihongyu.com/

你可能感兴趣的文章
Nginx配置实例-负载均衡实例:平均访问多台服务器
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Nginx配置自带的stub状态实现活动监控指标
查看>>
nginx配置详解、端口重定向和504
查看>>
Nginx配置负载均衡到后台网关集群
查看>>
Nginx配置限流,技能拉满!
查看>>
Nginx配置静态代理/静态资源映射时root与alias的区别,带前缀映射用alias
查看>>
Nginx面试三连问:Nginx如何工作?负载均衡策略有哪些?如何限流?
查看>>
Nginx:NginxConfig可视化配置工具安装
查看>>
ngModelController
查看>>
ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
查看>>
ngrok内网穿透可以实现资源共享吗?快解析更加简洁
查看>>
NHibernate学习[1]
查看>>
NHibernate异常:No persister for的解决办法
查看>>
NIFI1.21.0_java.net.SocketException:_Too many open files 打开的文件太多_实际操作---大数据之Nifi工作笔记0051
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>