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 相关文章推荐
Jquery.addClass始终无效原因分析
Sep 08 Javascript
jquery prop的使用介绍及与attr的区别
Dec 19 Javascript
基于jQuery实现最基本的淡入淡出效果实例
Feb 02 Javascript
基于JS实现简单的样式切换效果代码
Sep 04 Javascript
js倒计时简单实现方法
Dec 17 Javascript
javascript 数组的正态分布排序的问题
Jul 31 Javascript
Form表单按回车自动提交表单的实现方法
Nov 18 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
Dec 16 Javascript
原生js二级联动效果
Jun 20 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
Aug 06 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
Mar 06 Javascript
零基础之Node.js搭建API服务器的详解
Mar 08 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中ADODB类详解
2008/03/25 PHP
php运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
2014/07/08 PHP
php实现约瑟夫问题的方法小结
2015/03/23 PHP
php字符串操作常见问题小结
2016/10/11 PHP
jQuery 图像裁剪插件Jcrop的简单使用
2009/05/22 Javascript
Dom在ajax技术中的作用说明
2010/10/25 Javascript
始终在屏幕中间显示Div的代码(css+js)
2011/03/10 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
json+jQuery实现的无限级树形菜单效果代码
2015/08/27 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
2017/06/29 Javascript
vue 获取及修改store.js里的公共变量实例
2019/11/06 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
Python魔术方法详解
2015/02/14 Python
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
2020/03/14 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
HTML5在线预览PDF的示例代码
2017/09/14 HTML / CSS
h5网页水印SDK的实现代码示例
2019/02/19 HTML / CSS
HTML5 3D书本翻页动画的实现示例
2019/08/28 HTML / CSS
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
综合办公室主任职责
2013/12/16 职场文书
优秀团员个人事迹材料
2014/01/29 职场文书
消防安全管理制度
2014/02/01 职场文书
中国好声音广告词
2014/03/18 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS
SpringBoot 集成Redis 过程
2021/06/02 Redis
如何vue使用el-table遍历循环表头和表体数据
2022/04/26 Vue.js
CSS使用SVG实现动态分布的圆环发散路径动画
2022/12/24 HTML / CSS