Frage

Ich habe angefangen, das zu benutzen DataTables Plugin (v1.6.2) für JQuery(v1.4.2), und ich möchte Sie fragen, ob Sie a wissen die Einstellungen oder ein Plugin Dadurch kann ich den im Suchtextbox verwendeten Text auf den gefilterten Zeilen hervorheben.

Danke im Voraus

War es hilfreich?

Lösung

Ich müsste das vorschlagen Markieren Sie Plugin :)

Ich benutze dies im Moment ungefähr im selben Szenario, es hat mir bisher keine Probleme gegeben.

Die Verwendung ist ziemlich einfach:

$("#myTable").highlight($("#searchBox").val());

Setzen Sie einfach die Highlight CSS -Klasse in Ihre Stylesheet -Stile, wie Sie es wollen, und das war's:

.highlight { background-color: yellow }

Andere Tipps

Sie können diese Funktion verwenden, indem Sie diesen Inhalt bewältigen:

jQuery.fn.dataTableExt.oApi.fnSearchHighlighting = function(oSettings) {
    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
    if ((oSettings.aoPreSearchCols) && (oSettings.aoPreSearchCols.length > 0)) {
        for (var i in oSettings.aoPreSearchCols) {
            if (oSettings.aoPreSearchCols[i].sSearch) {
            searchStrings.push(oSettings.aoPreSearchCols[i].sSearch);
            }
        }
    }
    // 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]) {
            var regRules = "("
            ,   regRulesSplit = sSregex.split(' ');

            regRules += "("+ sSregex +")";
            for(var i=0; i<regRulesSplit.length; i++) {
              regRules += "|("+ regRulesSplit[i] +")";
            }
            regRules += ")";

            // This regex will avoid in HTML matches
            cache[sSregex] = new RegExp(regRules+"(?!([^<]+)?>)", '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
        if (aData[j]) {         
            // If there is a search string try to match
            if ((typeof sSregex !== 'undefined') && (sSregex)) {
                this.innerHTML = aData[j].replace( regex, function(matched) {
                    return "<span class='filterMatches'>"+matched+"</span>";
                });
            }
            // Otherwise reset to a clean string
            else {
                this.innerHTML = aData[j];
            }
        }
    });
    return nRow;
}, 'row-highlight');
return this;
};

Innerhalb :

DataTables.search-Highlight.js

Ein Anruf wie dieses Beispiel:

<script type="text/javascript" src="jquery.dataTables.js"></script>
<script type="text/javascript" src="dataTables.search-highlight.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
       var oTable = $('#example').dataTable();
       oTable.fnSearchHighlighting();
    } );
</script>

und fügen Sie diesen Code Ihrer CSS -Datei hinzu:

.filterMatches{
    background-color: #BFFF00;
}

Ich weiß, dass diese Frage jetzt über 6 Jahre alt ist und die Antworten hier möglicherweise Ihnen zum Zeitpunkt des Frages geholfen haben. Aber für Leute, die immer noch danach suchen, gibt es ein neues Plugin zum Integrieren mark.js - Ein JavaScript -Schlüsselwort Highlighter - in DataTables: DataTables.mark.js.

Die Verwendung ist so einfach wie:

$("table").DataTables({
    mark: true
});

Hier ist ein Beispiel: https://jsfiddle.net/julmot/buh9h2r8/

Dies ist der sauberste Weg und bietet Ihnen auch Optionen, die Ihnen keine der angegebenen Lösungen anbietet.

Es gibt jetzt offizielle Datentables Blog -Artikel verfügbar.

Sie können das folgende Hinzufügen verwenden

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<regRulesSplit.length; i++) {
                  regRules += "|("+ regRulesSplit[i] +")";
                }
                regRules += ")";

                // This regex will avoid in HTML matches
                cache[sSregex] = new RegExp(regRules+"(?!([^<]+)?>)", '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 "<span class='filterMatches'>"+matched+"</span>";
                    });
                }
                // Otherwise reset to a clean string
                else {
                    this.innerHTML = $(this).text();//aData[j];
                }
            }
        });
        return nRow;
    }, 'row-highlight');
    return this;
};

Diese Lösung funktioniert für mich. HINWEIS: Derzeit unterstützt es keine individuelle Spaltenfilterung, aber Sie müssen nur die Anhängerschaft im Code abschließen.

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

Ich habe dies mit DataTables 1.10.2 und JQuery 1.9.2 -Version getestet.

Dieses Hinzufügen hat eine bessere Funktion zum Hervorheben von Suchtext. Wenn Sie in einem Dialogfeld DataTable erstellt haben, müssen Sie im Dialog wieder eröffnet werden, um DataTable neu zu initialisieren.

In DataTableHighlighter.js

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]) {
                var regRules = "("
                ,   regRulesSplit = sSregex.split(' ');

                regRules += "("+ sSregex +")";
                for(var i=0; i<regRulesSplit.length; i++) {
                  regRules += "|("+ regRulesSplit[i] +")";
                }
                regRules += ")";

                // This regex will avoid in HTML matches
                cache[sSregex] = new RegExp(regRules+"(?!([^<]+)?>)", 'ig');
                //cache[sSregex] = new RegExp(regRules+"", '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);

            if (aData) {
                // If there is a search string try to match
                if ((typeof sSregex !== 'undefined') && (sSregex)) {
                    //For removing previous added <span class='filterMatches'>
                    var element = $(this);//convert string to JQuery element
                    element.find("span").each(function(index) {
                        var text = $(this).text();//get span content
                        $(this).replaceWith(text);//replace all span with just content
                    }).remove();
                    var newString = element.html();//get back new string

                    this.innerHTML = newString.replace( regex, function(matched) {

                        return "<span class='filterMatches'>"+matched+"</span>";
                    });
                }
                // Otherwise reset to a clean string
                else {
                    //For removing previous added <span class='filterMatches'>
                    var element = $(this);//convert string to JQuery element
                    element.find("span").each(function(index) {
                        var text = $(this).text();//get span content
                        $(this).replaceWith(text);//replace all span with just content
                    }).remove();
                    var newString = element.html();
                    this.innerHTML = newString;//$(this).html()//$(this).text();
                }
            }
        });
        return nRow;
    }, 'row-highlight');
    return this;
};

und nenn es so ....

$("#button").click(function() {
                  dTable = $('#infoTable').dataTable({"bPaginate": false,"bInfo" : false,"bFilter": true,"bSort":false, "autoWidth": false,"destroy": true,
              "columnDefs": [
                               { "width": "35%", "targets": 0 },
                               { "width": "65%", "targets": 1 }
                             ]});
          $(".dataTables_filter input[type='search']").val('');
          $("span[class='filterMatches']").contents().unwrap();
          dTable.fnSearchHighlighting();
          $("span[class='filterMatches']").contents().unwrap();


        $("#AboutDialog").dialog('open');

    });
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top