I have some code that shows a tables row when something is clicked. So, the row has it's style attribute disabled, see below:
HTML
<tr id='Asset' class='rrtr' style='display:none;'>
The user clicks and fires the Javascript, which works fine:
Javascript
document.getElementById("Asset").style.display = 'block';
However, the style of the row isn't in line with rest even though it's class attributes are set to 'rrtr' like the rest.
If I turn off 'display:none;' on the row and run it showing, the format is fine.
Any ideas?
I have some code that shows a tables row when something is clicked. So, the row has it's style attribute disabled, see below:
HTML
<tr id='Asset' class='rrtr' style='display:none;'>
The user clicks and fires the Javascript, which works fine:
Javascript
document.getElementById("Asset").style.display = 'block';
However, the style of the row isn't in line with rest even though it's class attributes are set to 'rrtr' like the rest.
If I turn off 'display:none;' on the row and run it showing, the format is fine.
Any ideas?
Share Improve this question edited Dec 1, 2016 at 22:21 Brian Tompsett - 汤莱恩 5,89372 gold badges61 silver badges133 bronze badges asked Feb 6, 2012 at 14:14 Homer_JHomer_J 3,32312 gold badges47 silver badges67 bronze badges4 Answers
Reset to default 7For best patibility, set
document.getElementById("Asset").style.display = '';
Internet Explorer 7 and lower do not support table-row
as a value for display
. Alternatively– and, arguably, a better idea is to – set a class for the row and remove/change it using JS:
<tr id='Asset' class='rrtr rrtr-hidden'>
<!-- .rrtr-hidden { display: none; } -->
// Remove class `.rrtr-hidden`
document.getElementById("Asset").className = 'rrtr';
Instead of block
, you should set the display value to table-row
.
set it to table-row
or to ""
I hide and show table rows by adding/removing a class name called 'hide'. This approach has the advantage of being able to hide/show any element without knowing or caring what its normal display style is. With table rows, that's probably a non-issue, but with other elements, you may one day wish to change from block
to inline
for example. If you use a class to hide elements, you don't have to change your javascript.
In your CSS:
.hide {
display:none;
}
And in javascript,
function hasClass(ele, cls) {
if( ele != null && ele.className != null ) {
return ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
} else {
return false;
}
}
function addClass(ele, cls) {
if (! hasClass(ele, cls)) {
ele.className += " " + cls;
}
}
function removeClass(ele, cls) {
if (hasClass(ele, cls)) {
var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
ele.className = ele.className.replace(reg, '');
}
}
That JS came from someone else on SO, but unfortunately I forgot to save a link.
So to hide an element addClass( document.getElementById('Asset'), 'hide' )
and removeClass
to show it.
EDIT: I missed Andy's answer somehow. It does essentially the same thing, however, these addClass & removeClass methods are a little more robust than modifying element.className "manually".