Upgrading from 1.8 -> 1.9 "issues"
Upgrading from 1.8 -> 1.9 "issues"
Romain
Posts: 2Questions: 0Answers: 0
Hi Allan,
To begin, i wanna to thank you for your really great job for datatables =)
I wanna upgrade from 1.8 to 1.9, and i have noticed that the "highlight search function" found in this forum is broken (without any error in the javascript console).
The code here:
[code]
// HIGHLIGHT FCT
jQuery.fn.dataTableExt.oApi.fnSearchHighlighting = function(oSettings) {
// Initialize regex cache
oSettings.oPreviousSearch.oSearchCaches = {}
oSettings.fnRowCallback = 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 (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]) {
// This regex will avoid in HTML matches
cache[sSregex] = new RegExp("("+sSregex+")(?!([^<]+)?>)", 'i');
}
var regex = cache[sSregex];
}
// Loop through the rows/fields for matches
$('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 ""+matched+"";
});
}
// Otherwise reset to a clean string
else {
this.innerHTML = aData[j];
}
}
});
return nRow;
};
return this;
}
[/code]
An idea?
Thanks a lot!
Romain
To begin, i wanna to thank you for your really great job for datatables =)
I wanna upgrade from 1.8 to 1.9, and i have noticed that the "highlight search function" found in this forum is broken (without any error in the javascript console).
The code here:
[code]
// HIGHLIGHT FCT
jQuery.fn.dataTableExt.oApi.fnSearchHighlighting = function(oSettings) {
// Initialize regex cache
oSettings.oPreviousSearch.oSearchCaches = {}
oSettings.fnRowCallback = 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 (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]) {
// This regex will avoid in HTML matches
cache[sSregex] = new RegExp("("+sSregex+")(?!([^<]+)?>)", 'i');
}
var regex = cache[sSregex];
}
// Loop through the rows/fields for matches
$('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 ""+matched+"";
});
}
// Otherwise reset to a clean string
else {
this.innerHTML = aData[j];
}
}
});
return nRow;
};
return this;
}
[/code]
An idea?
Thanks a lot!
Romain
This discussion has been closed.
Replies
This is how you would take account of the change: http://live.datatables.net/elonid/edit
Allan
Issue fixed :)
Romain
Thank you for fixing the code as well as the code cleanup. I diffed your version and my last version and was educated on a few things I had missed. I greatly appreciate your continued indulgence of this little plugin.
Cheers,
CHgsd
Say it again! I like hearing that ;-)
It looks like that code does highlight all words that it matches at the moment. If I load up the example and type "Firefox" into the filter input, I get four rows in the table and "Firefox" has been lighted in each of them. Does that not happen for you?
Allan
well, compliments are in order for such a great piece of code ;)
Yes, the current code highlights the search term in each row but in case a row has long text and let's say the search term would appear at least twice, then the current code would only highlight the first instance of the search term and then jumps out of the loop. Is there any quick change that would make it loop through ALL instances within the given longer text?
Any hints are greatly appreciated!
I've just tried typing '1' into the filter and it does still appear to work as you are looking for. I've got a lot of rows with '1' appearing twice in it, "Firefox 1.0" and "1.7" for example.
Allan