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 相关文章推荐
JSQL SQLProxy 的 php 版本代码
May 05 Javascript
20个最新的jQuery插件
Jan 13 Javascript
Javascript动态创建表格及删除行列的方法
May 15 Javascript
jQuery滚动加载图片实现原理
Dec 14 Javascript
js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
Jan 19 Javascript
讲解JavaScript的Backbone.js框架的MVC结构设计理念
Feb 14 Javascript
jQuery实现下拉框功能实例代码
May 06 Javascript
漂亮! js实现颜色渐变效果
Aug 12 Javascript
Angularjs 实现分页功能及示例代码
Sep 14 Javascript
vue-router:嵌套路由的使用方法
Feb 21 Javascript
js判断数组是否包含某个字符串变量的实例
Nov 24 Javascript
详解vue开发中调用微信jssdk的问题
Apr 16 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操作符与控制结构代码
2011/12/30 PHP
php中函数前加&amp;符号的作用分解
2014/07/08 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
2017/07/04 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
妙用Jquery的val()方法
2012/06/27 Javascript
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
Js实现无刷新删除内容
2015/04/29 Javascript
javascript实现自动填写表单实例简析
2015/12/02 Javascript
jQuery基于BootStrap样式实现无限极地区联动
2016/08/26 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
jquery实现焦点轮播效果
2017/02/23 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
JavaScript实现简单生成随机颜色的方法
2017/09/21 Javascript
nodejs前端模板引擎swig入门详解
2018/05/15 NodeJs
详解vue中axios请求的封装
2019/04/08 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
2019/11/25 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
Django框架中的对象列表视图使用示例
2015/07/21 Python
TensorFlow——Checkpoint为模型添加检查点的实例
2020/01/21 Python
python matplotlib绘制三维图的示例
2020/09/24 Python
python自动化测试三部曲之request+django实现接口测试
2020/10/07 Python
python实现计算图形面积
2021/02/22 Python
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
财务总监岗位职责
2014/03/07 职场文书
查摆问题整改措施
2014/10/24 职场文书
党建工作汇报材料
2014/12/24 职场文书
师德师风个人总结
2015/02/06 职场文书
大学毕业晚会开场白
2015/05/29 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书
八年级数学教学反思
2016/02/17 职场文书
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫