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 相关文章推荐
利用404错误页面实现UrlRewrite的实现代码
Aug 20 Javascript
Javascript 面向对象特性
Dec 28 Javascript
JS 遮照层实现代码
Mar 31 Javascript
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
Dec 02 Javascript
jQuery.event兼容各浏览器的event详细解析
Dec 18 Javascript
JavaScript判断textarea值是否为空并给出相应提示
Sep 04 Javascript
js判断某个方法是否存在实例代码
Jan 10 Javascript
jQuery实现网页抖动的菜单抖动效果
Aug 07 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
Nov 17 Javascript
微信小程序实战之上拉(分页加载)效果(2)
Apr 17 Javascript
JS实现利用两个队列表示一个栈的方法
Dec 13 Javascript
vue切换菜单取消未完成接口请求的案例
Nov 13 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(4) php 函数 补充2
2010/02/15 PHP
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
PHP框架Laravel中使用UUID实现数据分表操作示例
2018/05/30 PHP
基于jQuery的自动完成插件
2011/02/03 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
JavaScript基础语法、dom操作树及document对象
2014/12/02 Javascript
JS判断客服QQ号在线还是离线状态的方法
2015/01/13 Javascript
jQuery判断对象是否存在的方法
2015/02/05 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
2017/03/09 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
JS数组splice操作实例分析
2019/10/12 Javascript
Python中使用item()方法遍历字典的例子
2014/08/26 Python
python搜索指定目录的方法
2015/04/29 Python
python开发之函数定义实例分析
2015/11/12 Python
Windows下Python的Django框架环境部署及应用编写入门
2016/03/10 Python
Python操作Excel之xlsx文件
2017/03/24 Python
Python探索之创建二叉树
2017/10/25 Python
Python编写一个优美的下载器
2018/04/15 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
Python实战购物车项目的实现参考
2019/02/20 Python
小天鹅官方商城:LittleSwan
2017/06/16 全球购物
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
Lancer Skincare官方网站:抗衰老皮肤护理
2020/11/20 全球购物
Conforama瑞士:家具、厨房、电器、装饰
2020/09/06 全球购物
校园歌咏比赛主持词
2014/03/18 职场文书
建筑工地大门标语
2014/06/18 职场文书
励志演讲稿600字
2014/08/21 职场文书
春风化雨观后感
2015/06/11 职场文书
Js类的构建与继承案例详解
2021/09/15 Javascript