首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >数据表数据搜索和高亮显示与jmHighligh限制为一列(解决方案在末尾)

数据表数据搜索和高亮显示与jmHighligh限制为一列(解决方案在末尾)
EN

Stack Overflow用户
提问于 2016-01-08 20:15:33
回答 1查看 1.6K关注 0票数 0

我在和数据设备一起工作。

Datatable允许您在插件中包含一个搜索框,但是在您的许多帖子的帮助下,我能够对每一列进行一列搜索(我知道有一个Datatable插件,因为我无法使它为我工作)。

在此之后,我尝试实现代码以获得在表中高亮显示的搜索结果(同样使用Datatable突出显示插件)。我能够做到这一点,但我想为我创建的每个搜索框添加另一个突出显示插件。

我还能够处理这个元(使用jquery.jmHighlight.min.js代码),但我发现了两个不同的问题:

  1. 我无法将高亮显示限制为一列。
  2. 我无法避免突出显示消失,点击下一个搜索框。

下面是我使用的代码的一部分:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
function filterGlobal () {
    $('#example').DataTable().search(
       $('#global_filter').val()
    ).draw();
}

function filterColumn ( i ) {
    $('#example').DataTable().column( i ).search( 
       $('#col'+i+'_filter').val() 
    ).draw();

    var keyword = $('#col'+i+'_filter').val(); // this is to retrieve what have been inserted in search box called "colNUMOFCOLUMNfilter"

    $('#col'+i+'_filter td:nth-child(1)').jmRemoveHighlight(); //one of my test to limit search to a single column (the same as search box)
    $('#col'+i+'_filter td:nth-child(1)').jmHighlight(keyword); //one of my test to limit search to a single column (the same as search box)
   //I've also tried with:  $('input.column_filter').on( 'keyup click', jmRemoveHighlight()); $('input.column_filter').on( 'keyup click', jmHighlight(keyword));]

}

$(document).ready(function() {
[...]
   var table = $('#example').DataTable( {
   [...]
      "ajax": {
      [...]
      // HIGHLIGHT SEARCH (from Datatable that works only with global filter)
      "searchHighlight": true,
      [...]
   $('input.global_filter').on( 'keyup click', function () {
    filterGlobal();
   });

   $('input.column_filter').on( 'keyup click', function () {
    filterColumn( $(this).parents('tr').attr('data-column') );
   });
   [...]
</script>

所以我的问题是:

  1. 将高亮显示限制为单个列。当我使用上面的代码($('#example tbody').jmRemoveHighlight()/jmHighlight(keyword))时,它可以工作,但是与输入匹配的所有单词都会被高亮显示。
  2. 避免高亮显示消失,点击下一个搜索框。使用该代码时,当由于搜索框输入而突出显示某项内容时,当我单击另一个搜索框时,突出显示的单词返回正常,甚至禁用jmRemoveHighlight()。

如果能够将一个突出显示的搜索结果添加到下一个搜索结果中,这将是很棒的,直到您没有重置所有内容,将结果限制在每个搜索框中的单个列(只有第一个搜索框将是对整个表的一般搜索)。

更新诉0.1

没错,我对javascript和jquery不是很在行,但我认为这样做是可行的,怎么了?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 $(document).ready(function() {
     var table = $('#example').DataTable( {
     [all vars of plugin]
 } );

 //many listeners like
 // LINE FOR COL REORDER    
 new $.fn.dataTable.ColReorder( table );

 // LINE FOR ENLIGHT SELECTED ROW 
 $('#example tbody').on( 'click', 'tr', function () {
    $(this).toggleClass('selected');
 } );

 // HERE I've tried mine
 // TEST TEST
 $("input[name='keyword']").on("keyup", function () {
    window.alert("test");
    var datacol = table.column( 1 ).data(); //func of datatables to retrieve column data
    highilightMe( datacol ); //my function
});
// TEST TEST
[... many others working listeners]
});

//My function 
function highilightMe( datacol ) {
window.alert("HEY I AM HERE!");

// Read keyword
var keyword = $("input[name='keyword']").val(); //input for test highlight

//var table = $('#example').DataTable();
//var data = table.column( 0 ).data();
//Highlight the keyword inside the context
//$("#example, td, row").eq(1).jmRemoveHighlight();
//$("#example, td, row").eq(1).jmHighlight(keyword);
//window.alert();

$("#example", datacol).jmRemoveHighlight();
$("#example", datacol).jmHighilight(keyword);
}

但它不起作用,甚至连WINDOWS.ALERT也不起作用.所以这意味着函数没有很好的调用,但为什么.?

P.S.真正奇怪的是,使用$("#example, td, row").eq(1).jmRemoveHighlight(),我只能高亮显示一个单元格,但在另一个表中高亮显示(我的带有可数据的单元格被称为#示例)。

UPDATE诉0.2

为了了解哪些是不起作用的,并考虑到我对jQuery的一点了解,我重新构建了一个测试页面,以检查哪些不工作。

下面是使用可数据的页面的代码。我还能够恢复数据列,但是我不能使用这个var (数据数组)作为#容器来限制突出显示函数。

这是完整的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 [...]
 <script type="text/javascript" charset="utf8" src="//code.jquery.com/jquery-1.11.3.min.js"></script>
 <script type="text/javascript" src="js/jquery.dataTables.min.js"></script>
 <script type="text/javascript" src="https://cdn.datatables.net/1.10.10/js/jquery.dataTables.min.js"></script>
 <script type="text/javascript" src="https://cdn.datatables.net/fixedheader/3.0.0/js/dataTables.fixedHeader.min.js"></script>
 <script type="text/javascript" src="https://cdn.datatables.net/colreorder/1.2.0/js/dataTables.colReorder.min.js"></script>
 <script type="text/javascript" src="https://cdn.datatables.net/rowreorder/1.0.0/js/dataTables.rowReorder.min.js"></script>

 <title>Untitled Document</title>

 <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
 <script type="text/javascript" src="js/dataTables.searchHighlight.min.js"></script>
 <script type="text/javascript" src="js/jquery.highlight.js"></script>
 <link rel="stylesheet" type="text/css" href="css/dataTables.searchHighlight.css">
 <script type="text/javascript" src="js/jquery.jmHighlight.min.js">    </script>
 </head>

 <body>
 <br />
 <div class="title"><u>Search module</u></div><br />
 <br />
 <table id="example" class="show" id="show">
    <thead>
        <tr>
            <th>Market</th>
            <th>Curr</th>
            <th>Prods<br />(Qn)</th>
            <th>Quality</th>
            <th>Seller<br />(type)</th>
            <th>Type</th>
            <th>Stock</th>
            <th>Price<br />(curr)</th>
            <th>GOLD<br />Curr<br />change</th>
            <th>Price<br />(GOLD)</th>
            <th>Vat<br />tax</th>
            <th>Loc. Seller<br />price</th>
            <th>Imp.<br />Tax</th>
            <th>Int. Seller<br />price</th>
            <th>Link</th>
            <th>Serv</th>
            <th>Time Rec</th>
            <th>Date</th>
        </tr>
    </thead>
    <tbody>
    <br />
    </tbody>
 </table>
 <br />
 <hr width="95%" align="center">
 <br />
 <div class="col-xs-6">
    <span>Type in a keyword:</span>
    <input type="text" name="keyword" id="keyword" placeholder="Lorem ipsum..."> //I uses this for TESTING
 </div>
 <br />
 <hr width="95%" align="center">
 <br />

 <script>
 function test ( keyword ) {
     var col = $('#example').DataTable();
     var datac = col.column( 0 ).data();
     console.log( datac );
    //$.inArray(keyword,[datac]);
    //$.inArray(jmHighlight( keyword ),[datac]);

    //$("#example", datacol).jmRemoveHighlight();
    //$("#example", datacol).jmHighilight(keyword);
    $datac.jmRemoveHighlight(); //this return an error about finding datac var...
    $datac.jmHighlight( keyword );
 }

 $(document).ready(function() {
 // TEST TEST
     $("#keyword").on("keyup", function () {
     var keyword = $("#keyword").val(); 
     test( keyword );
});
// TEST TEST
var serverChoice = "server";
var table = $('#example').DataTable( {
    "processing": true,
    "rowReorder": true,
    "lengthMenu": [ [30, 60, 90, 120, 150, -1], [30, 60, 90, 120, 150, "All"] ],
    "language": {
    "loadingRecords": "Please wait - loading..."
    },
    select: {
        style: 'multi'
    },
    "ajax": {
        "url": "server_processing_prods.php?serverch="+serverChoice,
        "dataSrc": "demo",
    },
    //CHANGE COLOR OF FONT ON DATA  
    "createdRow": function ( row, data, index ) {
        // if ( data[7].replace(/[\$,]/g, '') * 1 > 10 ) {
        if ( (data[14]) = "Evening Record" ) {
            $('td', row).eq(14).addClass('evening_record');
        } else if ( (data[14]) = "Night Record" ) {
            $('td', row).eq(14).addClass('night_record');
        } else if ( (data[14]) = "Afernoon Record" ) {
            $('td', row).eq(14).addClass('afternoon_record');
        } else if ( (data[14]) = "Morning Record" ) {
            $('td', row).eq(14).addClass('morning_record');
        }
    },
    // HIGHLIGHT SEARCH
    //"searchHighlight": true,      
    //this is to set the link
       "columnDefs": [
            {  
                "targets": [0],
                "render": function ( data ) { 
                    return '<center><b><font size="1">' + data + '</font></b></center>'; 
                }
            },
            { 
                "targets": [1],
                "render": function ( data ) { 
                    return '<center><font size="1">' + data + '<br /><div class="sprite ' + data + '"></div></font></center>'; 
                }   
            },
            { 
                "targets": [2],
                "render": function ( data, type, row ) { 
                    return '<center><b><font size="1">'+ data +'</b><i> Q'+ row[3] +'</font></i></center>'; 
                }
            },              
            {  
                "targets": [3, 9, 11, 13],
                "render": function ( data ) { 
                    return '<font size="1"><center>' + data + '</center></font>'; 
                }
            },
            { 
                "targets": [4],
                "render": function ( data, type, row ) { 
                    return '<center><font size="1">'+ data +'<br><i>('+ row[5] +')</font></i></center>'; 
                }
            },      
            {  
                "targets": [8],
                "render": function ( data ) { 
                    return '<font size="1"><i><center>' + data + '</center></i></font>'; 
                }
            },      
            {  
                "targets": [10, 12],
                "render": function ( data ) { 
                    return '<font size="1"><i><center>' + data + '%</center></i></font>'; 
                }
            },      
            {  
                "targets": [14],
                "render": function ( data ) { 
                    return '<center><a href="' + data + '" target="_blank"><font color="#fff400" size="1">go to market</font></a></center>'; 
                }
            },  
            { 
                "targets": [6, 7, 15],
                "render": function ( data, type, row ) { 
                    return '<center><font size="1">'+ data +'</font></center>'; 
                }
            },
            { 
                "targets": [16],
                "render": function ( data, type, row ) { 
                    return '<center><i><font size="1">'+ data +'</font></i></center>';
                }
            },                     
            { "visible": false,  "targets": [ 3, 5 ] }
        ]   
    } );
 });
 </script>
 </body>
 </html>

这是密码。跟踪控制台结果。

解决方案诉1.0

我们开始吧。与往常一样,如果正确解释的话,解决方案就容易得多。

我的想法的错误之处在于,我试图使用数据(别名数据数组)来限制实现表列的数据,但我需要做的是将突出显示功能限制在一个特定的列上,该列具有特定的id。

因此,最简单的方法是: Datatables允许您定义表中的任何一列都是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       "columnDefs": [
            {  
                "targets": [0],
                "render": function ( data ) { 
                    return '<center><div id="country"><b><font size="1">' + data + '</font></b></div></center>'; 
                }
            },

因此,限制突出显示函数的最简单方法是告诉函数突出显示id.TABLE、part.of.TABLE和id.COLUMN中的单词。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$("#example tbody #country").jmRemoveHighlight();
$("#example tbody #country").jmHighlight(keyword);

就这样。也许这正是拉法尔卡斯特给我的建议,但我无法理解。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-26 03:25:37

恭喜你自己解决了这个问题。但是,对于有同样问题的其他人,我只是添加了一个文档中的示例,它向您展示了如何搜索和突出显示数据表中特定列的内容。

更新:datatables.mark.js.现在有一个新的插件来处理DataTables的搜索高亮显示:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34689593

复制
相关文章
cordova插件- Media
添加插件 $ cordova plugin add cordova-plugin-media 插件的使用 Methods · media.getCurrentAmplitude:Returns th
roc
2018/03/30
1.3K0
cordova插件- Media
cordova插件- Contacts
添加插件 $cordova plugin add cordova-plugin-contacts 图 8出现如上则添加成功 插件的使用 Methods navigator.contacts.create navigator.contacts.find navigator.contacts.pickContact Example <!--这是选择联系人--> function openContacts () { navigator.contacts.pickContact(function (con
roc
2018/03/30
1.1K0
cordova插件- Geolocation
添加插件 $ cordova plugin add cordova-plugin-geolocation 插件的使用 Methods navigator.geolocation.getCurrent
roc
2018/03/30
9960
cordova插件- Geolocation
cordova插件- Splashscreen
添加插件 $ cordova plugin addcordova-plugin-splashscreen 插件的使用 Methods 此处没有方法,主要是一些config.xml的配置 2. Exa
roc
2018/03/30
6940
cordova插件- Splashscreen
Cordova插件须知
ionic可以很方便的安装cordova插件,最新ionic-cli要求cordova插件里面有package.json和plugin.xml才能安装成功,如果缺失,请自行补上,而原来旧的cli不要求package.json文件(插件目录里的,不是ionic项目里的)。
IT晴天
2018/08/20
1.2K0
cordova插件-Dialogs
添加插件 $ cordova plugin add cordova-plugin-dialogs 图 10如上则添加成功 插件的使用 Methods navigator.notification.a
roc
2018/03/30
6900
cordova插件-Dialogs
cordova插件- Inappbrowser
添加插件 $ cordova plugin addcordova-plugin-inappbrowser 插件的使用 Methods cordova.InAppBrowser.open 2. Ex
roc
2018/03/30
8290
cordova插件- Inappbrowser
cordova插件-Device
添加插件 $ cordova plugin add cordova-plugin-device 图 11如上则添加成功 插件的使用 Methods(没有方法,只有对应的属性) device.cord
roc
2018/03/30
9000
cordova插件-Device
Cordova安装
1.安装 别使用cnpm,安好后会缺少包 如果想加速可以用下面的 npm install -g cordova --registry=https://registry.npm.taobao.or
治电小白菜
2020/08/25
4950
Cordova安装
mysql卸载与安装_cad卸载后无法重新安装
1、首先,停止window的MySQL服务,【windows键+R 】打开运行框,输入【services.msc】打开(或者找到“控制面板”-> “管理工具”-> “服务”,停止MySQL后台服务)服务管理器,停止MySQL后台服务。
全栈程序员站长
2022/11/11
1.3K0
Cordova 创建 Demo插件
MyPluginName.js JavaScript接口,用于插件与混合应用的接口。
acc8226
2022/05/17
7000
cordova插件-Device Orientation
添加插件 $ cordova plugin addcordova-plugin-device-orientation 图 13如上则插入成功 插件的使用 Methods navigator.com
roc
2018/03/30
7680
cordova插件-Device Orientation
如何卸载Eclipse安装的插件
有时候我们需要卸载Eclipse上安装的插件,看到有些朋友给出的解决方案是:删除要卸载插件在features以及plugins目录下的相关文件以及jar包,但我不认同这种方法,主要有以下原因:
johnhuster的分享
2022/03/28
1.3K0
如何卸载Eclipse安装的插件
cordova插件-Device Motion
添加插件 $ cordova plugin addcordova-plugin-device-motion 图 12如上则插入成功 插件的使用 Methods navigator.accele
roc
2018/03/30
9950
cordova插件-Device Motion
cordova插件之InAppBrowser
场景 Cordova插件InAppBrowser用于在移动端打开url链接 使用步骤 安装插件 cordova plugin add cordova-plugin-inappbrowser 使用插件方法 window.cordova.InAppBrowser.open("你要打开的url", '_system', 'location=no,hidden=yes'); 参数说明 _system:系统自带浏览器打开 _blank:app内webview打开 hidden:是否隐藏打开的url链接
安德玛
2022/03/08
3800
cordova插件- Media Capture
添加插件 $ cordova plugin addcordova-plugin-media-capture 插件的使用 Methods capture.captureAudio capture.ca
roc
2018/03/30
1K0
cordova插件- Media Capture
cordova插件-File Transfer
添加插件 $ cordova plugin addcordova-plugin-file-transfer 图 15如上则插入成功 插件的使用 Methods l upload: Sendsa f
roc
2018/03/30
1.1K0
cordova插件-File Transfer
cordova插件- Network Information
添加插件 $cordova plugin add cordova-plugin-network-information 插件的使用 Methods document.addEventListener
roc
2018/03/30
5760
cordova插件- Network Information
Jenkins插件无法安装解决
1、问题 jenkins各种改源地址都不行,都无法安装更新插件 2、可行方案 1、更改源地址(http://mirror.esuni.jp/jenkins/updates/update-center.json) 2、更改配置 a. vim jenkins/updetes/default.json b.把:"http://www.google.com/" 改成 "http://www.baidu.com/" 把:"https://updates.jenkins.io/do
cywhat
2022/12/02
2.9K0
【说站】ps卸载不干净无法安装
1、首先,试试正常的卸载方式,在控制面板上卸载PS,这样的问题在破解版的PS卸载中很容易出现。
很酷的站长
2022/11/23
1.6K0
【说站】ps卸载不干净无法安装

相似问题

无法卸载Cordova插件

517

无法安装cordova插件

11

Visual studio无法卸载Apache Cordova插件

14

无法安装Cordova网络插件

21

无法在AndroidStudio2.0中安装或卸载任何插件

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文