Here is a simple way to hide <select> boxes under an absolutely-positioned element (element):
var hiddenSelects = new Array();
if (element.getClientRects)
{
var selectBoxes = document.getElementsByTagName('select');
var left = parseInt(element.style.left, 10) - windowScrollX;
var top = parseInt(element.style.top, 10) - windowScrollY;
var right = left + element.offsetWidth;
var bottom = top + element.offsetHeight;
for (var i = 0; i < selectBoxes.length; i++)
{
if (selectBoxes[i].getClientRects)
{
var rects = selectBoxes[i].getClientRects();
for (var j = 0; j < rects.length; j++)
{
if (rects[j].top < bottom
&& top < rects[j].bottom
&& rects[j].left < right
&& left < rects[j].right)
{
selectBoxes[i].style.visibility = 'hidden';
hiddenSelects[hiddenSelects.length] = selectBoxes[i];
break;
}
}
}
}
}
The hidden <select>s will be stored in the selectBoxes array. To restore them later, simply:
for (var i = 0; i < hiddenSelects.length; i++)
hiddenSelects[i].style.visibility = 'visible';
Note that the element (element) will need to be pre-positioned (via pixel-based left and top values) and the values for windowScrollX and windowScrollY should already be calculated (that's a different topic).
This process for hiding selects will only process in IE (which is the only browser that requires such a script) and works quickly.