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 相关文章推荐
学习ExtJS(二) Button常用方法
Oct 07 Javascript
(function($){...})(jQuery)的意思
Jul 22 Javascript
javascript运动框架用法实例分析(实现放大与缩小效果)
Jan 08 Javascript
jQuery遮罩层效果实例分析
Jan 14 Javascript
jQuery Easyui实现左右布局
Jan 26 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
Apr 27 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
Nov 03 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
Jul 12 Javascript
强大的JavaScript响应式图表Chartist.js的使用
Sep 13 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
Jul 06 Javascript
JS实现将对象转化为数组的方法分析
Jan 21 Javascript
this在vue和小程序中的使用详解
Jan 28 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
海河写的 Discuz论坛帖子调用js的php代码
2007/08/23 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
2014/01/14 PHP
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
jQuery实现跨域
2015/02/03 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
深入理解Javascript中的自执行匿名函数
2016/06/03 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
微信小程序 页面滑动事件的实例详解
2017/10/12 Javascript
nodejs多版本管理总结
2018/04/03 NodeJs
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
js 实现在2d平面上画8的方法
2018/10/10 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
2019/07/11 Javascript
小程序实现分类页
2019/07/12 Javascript
es6中let和const的使用方法详解
2020/02/24 Javascript
基于javascript处理nginx请求过程详解
2020/07/07 Javascript
vue中移动端调取本地的复制的文本方式
2020/07/18 Javascript
图解JS原型和原型链实现原理
2020/09/15 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
2020/11/05 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
[01:08]DOTA2次级职业联赛 - Shield战队宣传片
2014/12/01 DOTA
Python socket实现简单聊天室
2018/04/01 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
浅谈利用缓存来优化HTML5 Canvas程序的性能
2015/05/12 HTML / CSS
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
美国购物网站:Clickhere2shop
2021/01/28 全球购物
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
中专自荐信
2013/10/13 职场文书
竞选大队长演讲稿
2014/04/29 职场文书
蛋糕店创业计划书
2014/05/06 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
食品药品安全责任书
2015/05/11 职场文书
红领巾广播站广播稿
2015/08/19 职场文书
2016党员发展对象培训心得体会
2016/01/08 职场文书
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python