extjs表格文本启用选择复制功能具体实现


Posted in Javascript onOctober 11, 2013

extjs提供了方便的表格组件grid供使用,但是默认情况下表格中的文本是不能被选中的,自然也是无法复制的。

而选择复制文本的需要也是很平常的,于是我们就需要自己动手来解决这个问题,实现extjs的grid文本选择复制功能。

说明一点,文中所列出的代码片断都是在当前ext 4.0.2a版本下的,其它版本未做测试,请自行斟酌。

首先自定义一下样式,来覆盖默认的css样式:

<style type="text/css"> 
.x-selectable, .x-selectable * { 
-moz-user-select: text!important; 
-khtml-user-select: text!important; 
} 
</style>

复写extjs的table类,阻止鼠标选择文本的就是这个unselectable
/** 
* override the table class 
*/ 
Ext.override(Ext.view.Table, { 
afterRender : function() { 
var me = this; 
me.callParent(); 
me.mon(me.el, { 
scroll : me.fireBodyScroll, 
scope : me 
}); 
if (!me.featuresMC && (me.featuresMC.findIndex('ftype', 'unselectable') >= 0)) { 
me.el.unselectable(); 
} 
me.attachEventsForFeatures(); 
} 
});

然后再自定义一个feature,启用文本选择功能,通过替换取消unselectable样式,同时增加x-selectable样式
/** 
* define the select feature 
*/ 
Ext.define('Myext.grid.SelectFeature', { 
extend : 'Ext.grid.feature.Feature', 
alias : 'feature.selectable', 
mutateMetaRowTpl : function(metaRowTpl) { 
var i, ln = metaRowTpl.length; 
for (i = 0; i < ln; i++) { 
tpl = metaRowTpl[i]; 
tpl = tpl.replace(/x-grid-row/, 'x-grid-row x-selectable'); 
tpl = tpl.replace(/x-grid-cell-inner x-unselectable/g, 'x-grid-cell-inner'); 
tpl = tpl.replace(/unselectable="on"/g, ''); 
metaRowTpl[i] = tpl; 
}; 
} 
});

现在可以声明一个selectFeature了

var selectFeature = Ext.create('Myext.grid.SelectFeature');

需要启用文本选择的表格,在创建时添加这个feature就可以了

Ext.create('Ext.grid.Panel', { 
title : 'grid example', 
store : gridStore, // define before 
width : 600, 
height : 300, 
features : [selectFeature], 
columns : [{ 
text:'name', 
dataIndex:'name' 
}] 
// other code 
}
Javascript 相关文章推荐
JS Replace()的高级使用方法介绍
Jun 29 Javascript
js中window.open打开一个新的页面
Aug 10 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
Apr 12 Javascript
jQuery的position()方法详解
Jul 19 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
Jun 17 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
Jul 10 Javascript
vue使用Google地图的实现示例代码
Dec 19 Javascript
详解async/await 异步应用的常用场景
May 13 Javascript
vue下使用nginx刷新页面404的问题解决
Aug 02 Javascript
微信小程序利用云函数获取手机号码
Dec 17 Javascript
Vue-cli3多页面配置详解
Mar 22 Javascript
如何在selenium中使用js实现定位
Aug 18 Javascript
JS验证身份证有效性示例
Oct 11 #Javascript
JS分页效果示例
Oct 11 #Javascript
appendChild() 或 insertBefore()使用与区别介绍
Oct 11 #Javascript
JQuery对class属性的操作实现按钮开关效果
Oct 11 #Javascript
鼠标划过实现延迟加载并隐藏层的js代码
Oct 11 #Javascript
javascript自然分类法算法实现代码
Oct 11 #Javascript
jQuery阻止事件冒泡具体实现
Oct 11 #Javascript
You might like
PHP生成带有雪花背景的验证码
2008/09/28 PHP
PHP基于工厂模式实现的计算器实例
2015/07/16 PHP
什么是OneThink oneThink后台添加插件步骤
2016/04/13 PHP
利用php输出不同的心形图案
2016/04/22 PHP
PHP中大括号'{}'用法实例总结
2017/02/08 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
不同浏览器的怪癖小结
2010/07/11 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
jQury Ajax使用Token验证身份实例代码
2017/09/22 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
小程序实现列表点赞功能
2018/11/02 Javascript
微信小程序实现弹出层效果
2020/05/26 Javascript
微信小程序页面传多个参数跳转页面的实现方法
2019/05/17 Javascript
React实现阿里云OSS上传文件的示例
2020/08/10 Javascript
[34:08]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS EG
2018/03/30 DOTA
python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
2009/04/09 Python
让python json encode datetime类型
2010/12/28 Python
Python字典操作详细介绍及字典内建方法分享
2018/01/04 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
基于DataFrame改变列类型的方法
2018/07/25 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
Django ORM 查询管理器源码解析
2019/08/05 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
模具专业毕业生自荐书范文
2014/02/19 职场文书
会计岗位描述
2014/02/22 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
呐喊读书笔记
2015/06/30 职场文书
Android Canvas绘制文字横纵向对齐
2022/06/05 Java/Android