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 相关文章推荐
javascript检查日期格式的函数[比较全]
Oct 17 Javascript
document.getElementById获取控件对象为空的解决方法
Nov 20 Javascript
node+express+ejs制作简单页面上手指南
Nov 26 Javascript
JavaScript将XML转成JSON的方法
Mar 12 Javascript
js实现密码强度检测【附示例】
Mar 30 Javascript
Node.js的环境安装配置(使用nvm方式)
Oct 11 Javascript
jQuery实现菜单栏导航效果
Aug 15 jQuery
js防刷新的倒计时代码 js倒计时代码
Sep 06 Javascript
Vue.js实现数据响应的方法
Aug 13 Javascript
JavaScript循环遍历你会用哪些之小结篇
Sep 28 Javascript
Vue触发式全局组件构建的方法
Nov 28 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
Aug 07 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中的session永不过期的解决思路及实现方法分享
2011/04/20 PHP
PHP反射机制用法实例
2014/08/28 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
window.open的功能全解析
2006/10/10 Javascript
Javascript Global对象
2009/08/13 Javascript
JQUERY的属性选择符和自定义选择符使用方法(二)
2011/04/07 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
javascript改变position值实现菜单滚动至顶部后固定
2013/01/18 Javascript
简述JavaScript的正则表达式中test()方法的使用
2015/06/16 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
细数JavaScript 一个等号,两个等号,三个等号的区别
2016/10/09 Javascript
详解微信小程序 页面跳转 传递参数
2016/12/08 Javascript
AngularJS指令与控制器之间的交互功能示例
2016/12/14 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
详解vue组件基础
2018/05/04 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
浅谈Python中chr、unichr、ord字符函数之间的对比
2016/06/16 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
django实现web接口 python3模拟Post请求方式
2019/11/19 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
keras导入weights方式
2020/06/12 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
美德少年事迹材料
2014/01/23 职场文书
运动会入场解说词
2014/02/07 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
环境工程专业自荐信
2014/03/03 职场文书
网络研修随笔感言
2015/11/18 职场文书
爱国之歌(8首)
2019/09/29 职场文书