jquery ui 实现table的sortable功能以及过滤记录功能

2023-11-11

本人在工作中曾使用js实现过用鼠标拖动表格的行实现重新排序的功能。当时写了不少的js代码。最近发现jquery ui也能实现这个功能,而且很方便,真后悔当时不知道有这么个好东东。好,现在介绍下如何使用jquery ui来实现。

 

引入的js文件

<script type="text/javascript" src="js/jquery-1.4.2.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.2.custom.min.js"></script>

 

页面元素

<div id="div_tbl" style="position:absolute;left:100px;">
<table cellspacing="1" cellpadding="0">
    <thead>
        <tr>
            <th>姓名</th><th>性别</th><th>学号</th>
        </tr>
    </thead>
    <tbody>
        <tr id="1">
            <td>a</td><td>男</td><td>2</td>
        </tr>
        <tr id="2">
            <td>b</td><td>男</td><td>3</td>
        </tr>
        <tr id="3">
            <td>bv</td><td>男</td><td>1</td>
        </tr>
    </tbody>
</table>
</div>

 

 

具体代码

<script type="text/javascript">
$(function(){
    //屏蔽屏幕的右键功能,一般来说只要在屏幕点击鼠标右键,浏览器不会再显示菜单
    $(document).bind("contextmenu", function() { return false; })
   
    //一般来说,如果显示了输入过滤条件的文本框,只要用户点击该框以外的地方,
    //该框会消失,因此绑定了文档的鼠标点击事件
    $(document).mousedown(function(e){
        if($('#div_text'))
            $('#div_text').remove();
    });
   
    $("#char").keyup(function(){
        $("tbody>tr").hide();
        $("tbody>tr>:nth-child(1):contains('"+$(this).val()+"')").each(function(){
            $(this).parent().show();
        });
    });
  
    //根据列值实现过滤功能
    $('th').mousedown(function(e){
        //如果是点击鼠标左键或者中键,则不显示文本框
        //上文曾经定义屏蔽屏幕的右键功能$(document).bind("contextmenu"...
        //请留意,这里定义的是mousedown
        if(e.which=='1' || e.which=='2') return;
       
        //获取列标对象,以及它的相对于浏览器左边的距离
        $_th=$(this);
        var offset = $_th.offset();
        var left= offset.left;
        var top=offset.top;
        //如果对着列标点击右键时,
        //存在输入过滤条件的文件框,则把它所在的层删除
        if($('#div_text'))
            $('#div_text').remove();
        //创建输入过滤条件的文本框以及它所在的层,并把它们加到文档中
        $_div_text=$("<div id='div_text' style='position:absolute;'><input id='txt' value=''></input></div>");
        $("body").append($_div_text);
       
        //定义输入过滤条件的层的对于浏览器的实际位置
        //让这个层一定出现在用户点击的列标上方
        $_div_text
            .css({
                "top":(top-$("#div_text").height())+"px",
                "left":(left)+"px"
            });
       
        //定义过滤条件输入框的键盘输入事件
        //如果用户按了回车,就根据过滤条件来过滤表格的行
        $('#txt').keydown(function(event){
            if(event.keyCode == 13){
                //获取用户鼠标右击的列标题在tr中的index值
                var index= $_th.index();
                //先把所有相关行隐藏
                $("tbody>tr").hide();
                //找到符合用户的过滤条件td集合
                //循环这个td集合,找到它们所在的tr,让tr显示出来
                $("tbody>tr>:nth-child("+(index+1)+"):contains('"+$(this).val()+"')").each(function(){
                    $(this).parent().show();
                });
                //执行完过滤操作后,隐藏过滤条件输入框
                $(this).remove();
            }
        });
       
        //由于上文绑定了文档的mousedown事件。由于事件冒泡的作用下,
        //当用户点击了文本档后,这个事件会往上冒泡到文档处。因此无输入过滤条件了
        //所以当用户点击这个文本框后,阻止mousedown事件往上冒
        $('#txt').mousedown(function(e){e.stopPropagation();});
       
        //由于上文绑定了文档的mousedown事件。由于事件冒泡的作用下,
        //当文本框显示后(或者未等它完全显示出来),列标题的mousedowng事件
        //就冒到文档处了,文档的mousedown就把这个刚创建的文本框给干掉
        //所以当用户点击列标题后,阻止mousedown事件往上冒
        e.stopPropagation();

    });
   
    //实现拖动行重新排序功能
    $("tbody").sortable({stop:function(event, ui){
        //stop事件是在完成重新排序后触发的事件
        //在此只简单显示被拖放行的id值
        alert(ui.item.attr("id"));
       
    }});
    $("tbody").disableSelection();
   
    //区分奇偶行背景色
    $("tbody>tr:odd").css("background","red");
    $("tbody>tr:even").css("background","green");
   
   
   
});

</script>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jquery ui 实现table的sortable功能以及过滤记录功能 的相关文章

  • 测试 jQuery UI 工具提示是否打开

    我正在尝试控制自动打开和关闭jQuery 工具提示 http api jqueryui com tooltip 如何测试工具提示的当前状态是否为打开 我正在使用所有内容的最新版本 Thanks 您可以尝试检查是否有任何课程ui toolti
  • @RenderBody() 该怎么办?

    我有一个 ASP NET MVC 3 应用程序JQuery UI Tabs 我有一个主布局页面 layout cshtml 代码如下 大师 layout cshtml需要一个 RenderBody 代码 既然是必需的 那我该怎么办呢 我想我
  • knockoutjs通过点击事件获取元素id

    我正在使用 knockoutjs 目前我认为有些东西看起来像这样 img src images image1 png 这允许我获取视图模型中的元素 ID pressedTab function tab console log Element
  • SlickGrid 回调onRowSelect?

    我想在用户选择表中的一行时添加回调 但我不知道该怎么做 这是我到目前为止所拥有的
  • 如何使用 jquery.validation 插件不将错误元素显示为标签

    好吧 伙计们 我已经阅读了有关 jQuery 验证插件的所有其他帖子和问题 他们似乎没有我想要做的事情 我希望显示错误不与消息一起显示 而只是在输入字段周围创建一个红色边框 这里只是一些表格
  • 你可以有多个 $(document).ready(function(){ ... });部分?

    如果我在启动时有很多功能 它们都必须在一个功能下 document ready function 或者我可以有多个这样的语句吗 您可以拥有多个 但这并不总是最好的做法 尽量不要过度使用它们 因为这会严重影响可读性 除此之外 这是完全合法的
  • 扩展引导程序预输入的宽度以匹配输入字段

    我知道这个问题之前至少被问过三次 但我看到的答案并不是我想要的 我希望增加 twitter bootstrap 通过其 typeahead 功能生成的自动完成字段的宽度 我一直在读到它延伸到覆盖该字段中的所有文本 也就是说 文本越长 自动完
  • 如何使用 JQuery DataTables 根据每个单元格中值的子字符串对列进行排序

    假设我有一列包含格式为 P 的对象标识符 例如 P12 3767 我使用的是 1 9 1 版本的 JQuery数据表插件 http datatables net用于排序和分页 有没有办法可以忽略单元格值的前 4 个字符 P12 部分 以便我
  • 按值对 JSON 进行排序

    我有一个非常简单的 JSON 对象 如下所示 people f name john l name doe sequence 0 title president url google com color 333333 f name micha
  • 如何将 div (或任何元素)覆盖在表格行 (tr) 上?

    我想在恰好有多个列的表行 tr 标记 上覆盖一个 div 或任何可以使用的元素 我尝试了几种方法 似乎都不起作用 我在下面发布了我当前的代码 我确实得到了一个覆盖 但不是直接覆盖在该行上 我尝试将覆盖顶部设置为 div Bottom css
  • 将 Laravel 集合/数组转换为 Javascript 数组

    我想将 Laravel 中的数组分配给 JavaScript 数组 我已经从我的AppServiceProvider和 json decoded 它像 View composer function view users Users all
  • 在查询中实现函数调用(分组运行总计)

    我有一个函数叫做fxGroupedRunningTotal fxGRT 和查询 总计 我想在 Totals 中调用 fxGRT 以便获得一个显示分组运行总计的列 我只能通过导入总计查询来测试 fxGRT 使用总计并调用 fxGRT 的查询
  • jspm / jQuery / TypeScript - 模块“jquery”没有默认导出

    我正在尝试使用 TypeScript 和 jspm system js 来引导 Web 应用程序进行模块加载 我还没有走多远 安装 jspm 后 并使用它来安装 jQuery jspm install jquery 以及基础知识 main
  • 仅隐藏那些选择了空值的选择框

    我只想隐藏那些选择了空值的选择框 我有以下 HTML 和 jQuery div class form item div
  • jQuery 价格滑块过滤器

    我已经创建了 jquery 价格滑块 但我不知道如何过滤我的结果 以便在滑动时您只能看到具有该值范围内的产品 HTML div class demo p p div
  • javascript/jquery 禁用点击提交按钮,防止重复提交

    所以我的提交按钮如下所示 a href img src images user create product png border 0 a 当我双击它时 显然会双重提交 问题是 我将信息保存在数据库中 因此那里会有重复的信息 我不想那样 这
  • 在多个数组中搜索字符串,然后设置 var - jQuery

    我正在寻找基于字符串存在于哪个数组中设置一个变量 例如 var primary red blue yellow var secondary orange purple green 然后检查 purple 并返回它在 secondary 数组
  • 如何仅突出显示嵌套表的最里面的表行?

    我有几个嵌套表 我想突出显示鼠标指针下方的最里面的行 我怎样才能做到这一点 一些提示 我使用嵌套表来显示递归表格数据 表可以嵌套 10 层 嵌套正如您所期望的那样 table tr td table tr td table tr td 可能
  • 无法从 JSON 请求获取数据,尽管我知道它已返回

    我试图获取从 getJSON 返回的数据 但我无法让它工作 我已经在 search twitter API 上尝试了相同的代码 效果很好 但它不适用于其他网站 我知道数据已返回 因为我在使用检查器时可以找到它 我通过检查器找到的值是 id
  • 角度 ng-repeat 根据条件添加样式

    我在 div 列表上使用 ng repeat 并且在渲染此 div 的 json 中手动添加项目 我需要定位我在 json 中添加的最后一个 div 它会自动在屏幕上渲染 即 couse 光标所在的位置 其余部分保持在相同位置 但没有给出渲

随机推荐

  • js 中的隐士转换 + ==规则

    ToString 1 数组中的null或undefined 会被当做空字符串处理 2 普通对象 转为字符串相当于直接使用Object prototype toString 返回 object Object ToNumber 1 null 转
  • Linux学习之基础工具一

    1 Linux 软件包管理器 yum 首先我们需要知道的是在Linux下 现存的软件和指令是一定的 而有的时候我们想需要更多的指令或者软件 而这在Linux本身下是没有的 故我们可以利用指令yum指令安装或卸载你想要或者不需要的软件 ubu
  • k8s学习pod第七天

    init Container 初始化容器是一类只运行一次的容器 本质是也是容器 不同容器间启动有先后顺序 只有前面的容器运行成功了 后面的容器才能运行 初始化容器的场景 在其他容器运行之前做个初始化 比如配置文件生成 环境变量生成 有先后顺
  • OpenCV——分水岭算法

    目录 一 分水岭算法 1 概述 2 图像分割概念 3 分水岭算法原理 二 主要函数 三 C 代码 四 结果展示 1 原始图像 2 分割结果 五 参考链接 一 分水岭算法 1 概述 分水岭算法是一种图像分割常用的算法 可以有效地将图像中的目标
  • Javascript高级程序设计——15-1.匿名函数和闭包

    1 匿名函数 表示没有定义函数名的函数 案例1 1 简单的匿名函数 function 单独的匿名函数无法执行 alert Lee 案例1 2 将匿名函数赋值给一个变量 var box function return Lee alert bo
  • 复数矩阵计算行列式

    项目上需要对复矩阵的行列式计算 根据计算一般矩阵行列式的代码改成了复矩阵行列式计算 include
  • 性能测试中TPS上不去的几种原因

    中TPS一直上不去 是什么原因 这篇文章 就具体说说在实际压力测试中 为什么有时候TPS上不去的原因 先来解释下什么叫TPS TPS Transaction Per Second 每秒事务数 指服务器在单位时间内 秒 可以处理的事务数量 一
  • Python库的使用说明

    目录 1 第三方库索引网站 2 第三方安装 2 1 pip工具介绍 2 2 pip工具安装 2 2 1 list 命令查看已安装的库列表 2 2 2 uninstall 命令 2 2 3 show 命令 2 2 4 download 命令
  • C++标准模板库 迭代器 iterator 详解(二)

    迭代器提供对一个容器中的对象的访问方法 并且定义了容器中对象的范围 迭代器就如同一个指针 事实上 C 的指针也是一种迭代器 但是 迭代器不仅仅是指针 因此你不能认为他们一定具有地址值 例如 一个数组索引 也可以认为是一种迭代器 迭代器有各种
  • [NOI2009]植物大战僵尸【拓扑+最大权闭合子图】

    题目链接 BZOJ 1565 看到这道题之后很容易想到的就是最大权闭合子图了 但是却有个问题就是要去除掉那些环 因为构成了环之后 相当于是无敌的状态 它们就永远不会得到贡献 并且环之后的点也是得不到贡献的 所以 这里利用拓扑 知道哪些点是可
  • 「Qt」事件概念

    0 引言 在本文所属专栏的前面的文章里 我们介绍了Qt的 信号 Signal 与 槽 Slot 机制 信号 Signal 与 槽 Slot 机制是 Qt 框架用于多个对象之间通信的 是 Qt 的核心特性 也是 Qt 与其他框架最大的不同之处
  • anaconda中spyder改变背景颜色(黑色)

    spyder挺好用的 但是未定义的背景颜色实在不好看 纯属个人审美 下面开始更换背景图 打开spyder 依此点击 Tools 再点击preference 喜爱 选择Syntax coloring Scheme调成Monokai 这是我喜欢
  • python+selenium+unittest自动化测试框架

    前言 关于自动化测试的介绍 网上已有很多资料 这里不再赘述 UI自动化测试是自动化测试的一种 也是测试金字塔最上面的一层 selenium是应用于web的自动化测试工具 支持多平台 多浏览器 多语言来实现自动化 优点如下 开源 免费且对we
  • pyecharts在数据可视化中的应用 (二)(pyecharts绘制树图、矩形树图、地理热力图、词云图、相关性矩阵等图)

    1 使用以下JSON数据绘制树图 矩形树图 from pyecharts import options as opts from pyecharts charts import Tree data name flare children n
  • Android 系统性能优化(57)---MTK 平台开关机、重启时间优化

    MTK 平台开关机 重启时间优化 开关机 重启时间优化 开机性能优化 是用功能和其它因素多方面平衡的结果 片面追求单方面的性能没有太大意义 有些产品设计开机动画非常酷炫 动画图片过多 高帧率会影响开机速度 这时就需要看是开机速度优先还是体验
  • 人工智能(pytorch)搭建模型8-利用pytorch搭建一个BiLSTM+CRF模型,实现简单的命名实体识别

    大家好 我是微学AI 今天给大家介绍一下人工智能 pytorch 搭建模型8 利用pytorch搭建一个BiLSTM CRF模型 实现简单的命名实体识别 BiLSTM CRF 模型是一种常用的序列标注算法 可用于词性标注 分词 命名实体识别
  • kubernetes资源控制器【一】- ReplicaSet控制器

    一 Pod控制器 Master的各组件中 API Server仅负责将资源存储于etcd中 并将其变动通知给各相关的客户端程序 如kubelet kube scheduler kube proxy和kube controller manag
  • id和instancetype的应用场景区别

    在 Objective C 中 id 是一个通用的指针类型 可以用来表示任何类型的对象 而instancetype是一个表示当前类类型的指针类型 通常用于方法的返回值类型 下面是它们的一些使用场景 使用id的情况 当你需要一个指向任何对象的
  • ubuntu 触摸板失灵解决

    ubuntu 触摸板失灵解决 Ubuntu 20 04 开机发现触摸板只能单击 经常漂移影响打字输入 操作 sudo modprobe r psmouse sudo modprobe psmouse 目的在于重新加载内核触摸板模块 重新加载
  • jquery ui 实现table的sortable功能以及过滤记录功能

    本人在工作中曾使用js实现过用鼠标拖动表格的行实现重新排序的功能 当时写了不少的js代码 最近发现jquery ui也能实现这个功能 而且很方便 真后悔当时不知道有这么个好东东 好 现在介绍下如何使用jquery ui来实现 引入的js文件