I agree with Dan 100%. I'd also offer an alternative solution. Before Tablesorter 2.0, I had a similar situation and resolved it by adding a hidden <span> tag before the data that contained the 'raw' timestamp integer for sorting purposes. This worked really well with the old tablesorter (and still works with 2.0).
Here's what I have: <td><span style="display: hidden;">12345</span>1 day 2 hours ......</ td> The table sorter parses the first bit of "data" it sees. On Jul 8, 6:51 am, "Dan G. Switzer, II" <[EMAIL PROTECTED]> wrote: > >I am using the tablesorter plugin, which I really like. However, in > >several of my table cells I have oddly formatted time values that look > >like the following: > > >1d 12h 34m 25s > > >Which maps to: > > >1 day, 12 hours, 34 mins and 25 seconds > > >I cannot change how these values are displayed - they have to be in > >that format. However, in my code I also create an attribute to the > >table cell called sorttable_customval in which I insert the raw number > >format as a float: > > ><td sorttable_customkey="dlt" sorttable_customval="65.093" >1m 5s</ > >td> > > > I have tried to write my own add-on to the tablesorter source code to > >get this attribute value in the confines of the tablesorter > >textExtraction method: > > >Javascript at the top of my webpage with the table > >====================================== > >("#monitor").tablesorter({ > > textExtraction: 'customattribute', > > debug: true, > > widgets:['zebra'] > >}) > > >The modified part of tablesorter.js (rows 233 and 234) > >========================================= > >221 function getElementText(config,node) { > >222 > >223 if(!node) return ""; > >224 > >225 var t = ""; > >226 > >227 if(config.textExtraction == "simple") { > >228 if(node.childNodes[0] && > >node.childNodes[0].hasChildNodes()) { > >229 t = node.childNodes[0].innerHTML; > >230 } else { > >231 t = node.innerHTML; > >232 } > >233 } else if(config.textExtraction == > >"customattribute") { > >234 t = $(node).attr('sorttable_customval'); > >235 } else { > >236 if(typeof(config.textExtraction) == > >"function") { > >237 t = config.textExtraction(node); > >238 } else { > >239 t = $(node).text(); > >240 } > >241 } > >242 return t; > >243 } > > >I thought this would work, but I get the following error in Firebug: > > >s is undefined jquery.tablesorter.js (line 703) > > return $.trim(s.toLowerCase()); > > The problem with using the textExtraction (at least from my understanding) > is that it works for all columns. So, I suspect the error is coming from the > fact that the 'sorttable_customval' only existing on some columns and is > returning undefined for the other columns (thus breaking $.trim().) > > You were close when you wrote a custom parser--which is the way I've solved > this problem in the past. The problem is you used the "is" option instead of > the "function" option. > > Try this: > > $.tablesorter.addParser({ > id: 'dlt', > is: function (s){ return false }, > format: function(value, table, cell){ > return cell.parentNode.getAttribute('sorttable_customval'); > }, > type: 'numeric' > > }); > > In the "format" option, the "value" is what's coming back from the > textExtraction method. In this case, we want to ignore this value all > together, and instead use the cell to extract the attribute. > > -Dan