jQuery plugin DataTables: How to highlight the current search text?

前端 未结 5 1068
青春惊慌失措
青春惊慌失措 2020-11-30 10:42

I have started using the DataTables plugin (v1.6.2) for jQuery(v1.4.2), and I would like to ask you if you know a settings

5条回答
  •  失恋的感觉
    2020-11-30 11:13

    You can use the following add on

    jQuery.fn.dataTableExt.oApi.fnSearchHighlighting = function(oSettings) {
        // Initialize regex cache
        oSettings.oPreviousSearch.oSearchCaches = {};
    
        oSettings.oApi._fnCallbackReg( oSettings, 'aoRowCallback', function( nRow, aData, iDisplayIndex, iDisplayIndexFull) {
            // Initialize search string array
            var searchStrings = [];
            var oApi = this.oApi;
            var cache = oSettings.oPreviousSearch.oSearchCaches;
            // Global search string
            // If there is a global search string, add it to the search string array
            if (oSettings.oPreviousSearch.sSearch) {
                searchStrings.push(oSettings.oPreviousSearch.sSearch);
            }
            // Individual column search option object
            // If there are individual column search strings, add them to the search string array
    
         //   searchTxt=($('#filter_input input[type="text"]')?$('#filter_input input[type="text"]').val():"");
            var searchTxt = $('input[type="search"]').val();
            // console.log("txt" + searchTxt);
            if ((oSettings.aoPreSearchCols) && (oSettings.aoPreSearchCols.length > 0)) {
                for (var i in oSettings.aoPreSearchCols) {
                    if (oSettings.aoPreSearchCols[i].sSearch) {
                    searchStrings.push(searchTxt);
                    }
                }
            }
            // Create the regex built from one or more search string and cache as necessary
            /*if (searchStrings.length > 0) {
                var sSregex = searchStrings.join("|");
                if (!cache[sSregex]) {
                    // This regex will avoid in HTML matches
                    cache[sSregex] = new RegExp("("+escapeRegExpSpecialChars(sSregex)+")(?!([^<]+)?>)", 'i');
                }
                var regex = cache[sSregex];
            }*/
            if (searchStrings.length > 0) {
                var sSregex = searchStrings.join("|");
                if (!cache[sSregex]) {
                    var regRules = "("
                    ,   regRulesSplit = sSregex.split(' ');
    
                    regRules += "("+ sSregex +")";
                    for(var i=0; i)", 'ig');
                }
                var regex = cache[sSregex];
            }
    
            // Loop through the rows/fields for matches
            jQuery('td', nRow).each( function(i) {
    
                // Take into account that ColVis may be in use
                var j = oApi._fnVisibleToColumnIndex( oSettings,i);
                // Only try to highlight if the cell is not empty or null
             //   console.log("data "+ aData[j] + " j " + j);
             //   console.log("data 1  "+ nRow);
                if (aData) {
                    // If there is a search string try to match
                    if ((typeof sSregex !== 'undefined') && (sSregex)) {
                        //console.log("here :: "+$(this).text());
                        this.innerHTML = $(this).text().replace( regex, function(matched) {
    
                            return ""+matched+"";
                        });
                    }
                    // Otherwise reset to a clean string
                    else {
                        this.innerHTML = $(this).text();//aData[j];
                    }
                }
            });
            return nRow;
        }, 'row-highlight');
        return this;
    };
    

    This solution is working for me. Note: Currently it does not support individual column filtering, but you just have to uncomment following in the code.

    searchTxt=($('#filter_input input[type="text"]')?$('#filter_input input[type="text"]').val():"");
    

    I have tested this with datatables 1.10.2 and jquery 1.9.2 version.

提交回复
热议问题