Well, I will completely redo this because I looked more at your problem and saw that the white space problem was a problem.
As I said, use white-space: pre-wrap to avoid distortion. There is also an IE equivalent.
First, here is an example that demonstrates redefining td elements and removing style for others. It is hardcoded, but it can be manipulated according to your needs.
http://ece.arizona.edu/~justinvh/test.html
Here is the html:
<!DOCTYPE HTML> <html> <head> <title>Testing Horizontal Accordion</title> <style> table { width: 100%; } th { display: table-cell !important; } td { border: 1px solid #A8A8A8; } div.content { max-height: 20px; overflow: hidden; white-space: pre-wrap; } </style> <script src="jquery-1.3.2.min.js"></script> </head> <body> <table> <thead> <tr> <th style="width: 70%;">A</th> <th>B</th> </tr> </thead> <tbody> <tr> <td> <div class='content'>Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! </div> </td> <td> <div class='content'>Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! </div> </td> </tr> <tr> <td> <div class='content'>Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! Hello, my baby! </div> </td> <td>Hello, my baby!</td> </tr> </tbody> </table> </body> </html>
Here is the javascript:
<script> var $active = $("thead > tr > th:first"); var $active_td = $('div.content', 'table > tbody > tr > td:nth-child(1)'); var min_width = $active.next().width(); var max_width = $active.width(); $("thead > tr > th").each(function(i, e) { (function(ith, element) { $(element).click(function() { $active_td.css('max-height', '20px'); $active.animate({ width: min_width }, { queue: false, duration: 400 }); $active_td = $('div.content', 'table > tbody > tr > td:nth-child(' + (ith + 1) + ')'); $active_td.css('max-height', 'inherit'); $(this).animate({ width: max_width }, { queue: false, duration: 400 }); $active = $(this); }); })(i, e); }); $('thead > tr > th:first').click(); </script>
So, there are some things to note. I use the nth-child selector to get the td elements that match th, by looping over each th and applying a function that consumes the environment (to avoid references). This can obviously be done in several ways.
You can apply this CSS using the βfullβ animation callback and do it this way.
I purposefully qualified selectors so you can see how they should work. You can add identifiers / classes to any necessary tool.
Let me know if this works for you.