修改jQuery表格插件flexigrid源码添加自定义功能(2)

灵活调整flexigrid表格插件:自定义功能与行双击事件
本文详细介绍了如何修改flexigrid表格插件的源码,实现自定义功能及针对行的双击事件处理。通过分析代码片段,读者能理解如何为表格单元添加特定事件处理器,以及如何扩展表格对象的功能,以增强用户体验。重点展示了为行元素添加鼠标双击事件处理,包括样式变化和自定义回调函数的应用。

还是在上文《修改jQuery表格插件flexigrid源码添加自定义功能(1)》提到的那个位置添加代码,我们也可以将代码加在上文提到的代码后面:

if(p.colModel[idx].handler){
    $(td).click(function(){
        p.colModel[idx].handler.call(this, g, i);
    });
}

这里首先判断colModel的定义里是否包含鼠标单击事件处理函数handler,如果包含,则为元素(td)添加鼠标单击事件。函数的调用使用了javascript原生的call方法,第一个参数指定了handler函数的调用者,此处用this即用户点击的td元素。第二个参数是表格类对象,第三个是索引,标明被单击的单元处于整个表格的第几行。

如果不熟悉call方法,建议读者可以找点别的资料看看,这个相对来说还是比较简单的。this关键字对于初学者来说略显复杂,总的来说,一个函数内部的this指代的就是这个函数的实际调用者,而且可以认为this总是处在某个函数内部的。笔者会找个时间专门写篇文章分享一下自己的见解。

前面讲解的都是针对表格单元的自定义功能,其实对flexigrid别的方面进行修改也是很容易的,比如针对整行或整列的修改,举个具体的例子,比如说增加针对行的鼠标双击处理事件。我们只需找到表格对象g的addRowProp方法(666行左右),顾名思义,这是一个为“行”元素添加属性的方法。查看其代码,发现其实就是遍历表格的每一行,利用jquery的链式语法,分别添加鼠标单击、鼠标键按下、抬起、以及hover的函数,控制各行在选中或未被选中的状态下,样式上的一点变化。我们可以在链式调用的最后,加上一个新的函数:

$(this).click(function (e) {
        var obj = (e.target ||e.srcElement);
        if (obj.href || obj.type)
                return true;
        $(this).toggleClass('trSelected');
        if (p.singleSelect)
                $(this).siblings().removeClass('trSelected');
}).mousedown(function (e) {
        if (e.shiftKey) {
                $(this).toggleClass('trSelected');
                g.multisel= true;
                this.focus();
                $(g.gDiv).noSelect();
        }
}).mouseup(function () {
        if (g.multisel) {
                g.multisel= false;
                $(g.gDiv).noSelect(false);
        }
}).hover(function (e) {
        if (g.multisel) {
                $(this).toggleClass('trSelected');
        }
        //新增鼠标双击事件处理,并且将行元素作为参数传递给事件处理函数
},function() {}).dblclick(  
        function () {
                if (p.onRowDblclick){
                        p.onRowDblclick.call(this,this);
                }
        }
);

在这个函数中,我们判断表格属性的定义p中(p的解释详见上文)是否存在双击事件处理函数的定义,笔者给这个属性取名叫onRowDblclick,当存在这个属性定义时,就将行元素对象作为this调用该处理函数,并且把行元素对象作为参数传递给这个处理函数。

表格的定义类似下列代码:

$('#userGrid').flexigrid({
   resizable:false,
   url: url,
   dataType: 'json',
   method:'get',
   singleSelect:true,
   //定义行双击事件的处理函数为rowDblclick
   onRowDblclick: rowDblclick,
   colModel: [ {
      display: '用户名',
                name: 'userName',
                width: 100,
                sortable: false,
                align: 'center'
      ………………
      ………………

至此,相信仔细阅读的读者已经基本了解了修改flexigrid的思路,没有修改过源码的同志们,大概已经明白了,修改源码其实是一件很简单的事情。笔者对源码修改位置的描述可能不是特别清楚,现将修改过的flexigrid js源码(未压缩)提供给大家下载,希望本文内容能够对大家有所帮助。

源码下载地址:http://download.youkuaiyun.com/detail/neareast/6432859


### Pandas 文件格式读写操作教程 #### 1. CSV文件的读取与保存 Pandas 提供了 `read_csv` 方法用于从 CSV 文件中加载数据到 DataFrame 中。同样,也可以使用 `to_csv` 将 DataFrame 数据保存为 CSV 文件。 以下是具体的代码示例: ```python import pandas as pd # 读取CSV文件 df = pd.read_csv('file.csv') # 加载本地CSV文件 [^1] # 保存DataFrame为CSV文件 df.to_csv('output.csv', index=False) # 不保存行索引 [^1] ``` --- #### 2. JSON文件的读取与保存 对于JSON格式的数据,Pandas 支持通过 `read_json` 和 `to_json` 进行读取和存储。无论是本地文件还是远程 URL 都支持。 具体实现如下所示: ```python # 读取本地JSON文件 df = pd.read_json('data.json') # 自动解析为DataFrame对象 [^3] # 从URL读取JSON数据 url = 'https://example.com/data.json' df_url = pd.read_json(url) # 直接从网络地址获取数据 # 保存DataFrame为JSON文件 df.to_json('output.json', orient='records') ``` --- #### 3. Excel文件的读取与保存 针对Excel文件操作Pandas 使用 `read_excel` 来读取 `.xls` 或 `.xlsx` 格式的文件,并提供 `to_excel` 方法导出数据至 Excel 表格。 注意:需要安装额外依赖库 `openpyxl` 或 `xlrd` 才能正常运行这些功能。 ```python # 安装必要模块 (如果尚未安装) !pip install openpyxl xlrd # 读取Excel文件 df_excel = pd.read_excel('file.xlsx', sheet_name='Sheet1') # 导出DataFrame为Excel文件 df.to_excel('output.xlsx', sheet_name='Sheet1', index=False) ``` --- #### 4. SQL数据库的交互 当涉及关系型数据库时,Pandas 可借助 SQLAlchemy 库连接各种类型的数据库(如 SQLite, MySQL)。它允许直接查询并将结果作为 DataFrame 返回;或者反过来把现有 DataFrame 插入到指定表中。 下面是基于SQLite的一个例子: ```python from sqlalchemy import create_engine # 创建引擎实例 engine = create_engine('sqlite:///database.db') # 查询SQL语句并返回DataFrame query = "SELECT name, salary, department FROM employees" sql_df = pd.read_sql(query, engine) # 计算各部门平均工资 avg_salary_by_dept = sql_df.groupby('department')['salary'].mean() # 将DataFrame存回SQL表 avg_salary_by_dept.to_sql(name='average_salaries_per_department', con=engine, if_exists='replace', index=True) ``` 上述片段说明了如何执行基本SQL命令以及后续数据分析流程[^4]。 --- #### 5. 多层次索引(MultiIndex)的应用场景 除了常规单维度索引外,在某些复杂情况下可能需要用到多级索引结构。这时可以依靠 MultiIndex 构建更加灵活的数据模型。 例如定义一个多层列名体系: ```python arrays = [['A','A','B','B'], ['foo','bar','foo','bar']] tuples = list(zip(*arrays)) index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second']) df_multi_indexed = pd.DataFrame([[0,1,2,3], [4,5,6,7]], columns=index) print(df_multi_indexed) ``` 这段脚本演示了怎样构建一个具有双重分类标签的表格布局[^2]。 --- ### 总结 综上所述,Pandas 是一种强大而易用的数据处理工具包,适用于多种常见文件类型之间的相互转换及其高级特性应用开发之中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值