Thanks for the solution, it works well. If you want to use jQuery (it's embedded by jasperserver), you have to use $ sign. But $ sign is not much appreciate by html component, so you can use "jQuery" instead of $. And be careful to the place and the moment javascript function was loaded. For example, in my report i write (all in the same line) : "<textarea class='hidden' style='display:none' name='_evalScript'>jQuery( document ).ready( function() { jQuery('.class_D').parent().hide(); jQuery('.button_plus').toggle(function() { jQuery('.'+jQuery(this).attr('id')+'_D').parent().show(); }, function() { jQuery('.'+jQuery(this).attr('id')+'_D').parent().hide(); }); });</textarea>" Explanation : I have a table with primary rows and delegate rows => Primary Row Delegate row 1 Delegate row 2 Primary row Delegate row 1 Delegate row 2 Delegate row 3 With an net.sf.jasperreports.export.html.class on properties, i put a class "class_D" for delegate rows and "class_P" for primary rows (more precisely, on one element in the row. jQuery( document ).ready( function() { // I load all functions when the document is ready so it will works jQuery('.class_D').parent().hide(); // I recover parent html element on row with class_D, when the element is on a "td", the parent element is a "tr" and i hide all of it jQuery('.button_plus').toggle(function() { jQuery('.'+jQuery(this).attr('id')+'_D').parent().show(); // I put a button on each row with class "button_plus" with net.sf.jasperreports.export.html.class. When the button is click one time, it show delegate row of the primary element },function() { jQuery('.'+jQuery(this).attr('id')+'_D').parent().hide(); // When the button is click the second time, it hide delegate row of the primary element },function() { }); });[/code]