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 相关文章推荐
根据分辨率不同,调用不同的css文件
Jul 07 Javascript
Javascript面向对象编程(三) 非构造函数的继承
Aug 28 Javascript
js模拟滚动条(横向竖向)
Feb 22 Javascript
Javascript控制div属性动态变化实例分析
Oct 08 Javascript
javascript实现Email邮件显示与删除功能
Nov 21 Javascript
js实现开启密码大写提示
Dec 21 Javascript
javascript 的变量、作用域和内存问题
Apr 19 Javascript
VUE多层路由嵌套实现代码
May 15 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
Dec 29 Javascript
借助云开发实现小程序短信验证码的发送
Jan 06 Javascript
vant组件中 dialog的确认按钮的回调事件操作
Nov 04 Javascript
javascript实现随机抽奖功能
Dec 30 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/02/26 PHP
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
PHP实现的日历功能示例
2018/09/01 PHP
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
javascript中sort()的用法实例分析
2015/01/30 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
JS实现的几个常用算法
2016/11/12 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
3种vue路由传参的基本模式
2018/02/22 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
微信小程序 slot踩坑的解决
2019/04/01 Javascript
从零使用TypeScript开发项目打包发布到npm
2020/02/14 Javascript
python中随机函数random用法实例
2015/04/30 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
Python内置函数——__import__ 的使用方法
2017/11/24 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
Python 支付整合开发包的实现
2019/01/23 Python
python 字典有序并写入json文件过程解析
2019/09/30 Python
快速解释如何使用pandas的inplace参数的使用
2020/07/23 Python
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
html5 canvas实现给图片添加平铺水印
2019/08/20 HTML / CSS
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
二年级语文教学反思
2014/02/02 职场文书
心理学专业求职信
2014/06/16 职场文书
2014年学习全国道德模范事迹思想汇报
2014/09/15 职场文书
成绩报告单家长评语
2014/12/30 职场文书
运动会致辞稿
2015/07/29 职场文书
离婚协议书格式范本
2016/03/18 职场文书