使用Javascript隐藏/显示表列(是否适用于所有浏览器?)

使用Javascript隐藏/显示表列(是否适用于所有浏览器?),javascript,html,coding-style,Javascript,Html,Coding Style,我有一个有很多列的长表,对于用户来说它看起来真的很难看。我想做的是创建一个简单的按钮,作为开关,打开和关闭一些列 有些列是不需要的,所以我所做的是在每个列中添加一个不需要的类,例如: 现在,我想我能做的是: var hidden = 1; function toggleTable(){ element_array = document.getElementsByClassName('disabled'); for(i = 0; i < element_ar

我有一个有很多列的长表,对于用户来说它看起来真的很难看。我想做的是创建一个简单的按钮,作为开关,打开和关闭一些列

有些列是不需要的,所以我所做的是在每个列中添加一个不需要的类,例如:

现在,我想我能做的是:

var hidden = 1;
     function toggleTable(){
      element_array = document.getElementsByClassName('disabled');
      for(i = 0; i < element_array.length; i++){
      if(hidden == 1){
        element_array[i].style.display = 'none';
      }else{
        element_array[i].style.display = '';
      }
      }

      if(hidden == 1) hidden = 0;
      else hidden = 1;
     }
var-hidden=1;
函数切换表(){
element_array=document.getElementsByClassName('disabled');
对于(i=0;i
这在Firefox中大部分都有效,但在IE(7+8)中进行了一些快速测试,我得到以下结果: 消息:对象不支持此属性或方法

显然,这表明IE不想让我简单地更改“display:none;”作为表列/行之类的内容

我想不出任何解决办法。理想情况下,我希望有一个完全交叉兼容的解决方案来切换某些表列的显示,但如果它在较旧的浏览器(例如:IE6)中不兼容,那么这也没问题。

那么呢

那怎么办


您得到的错误不是因为IE不想设置display属性,而是因为GetElementsByCassName方法没有在IE中实现。如果您想实现该方法,可以使用Dustin Diaz编写的这个方法

function getElementsByClass(searchClass,node,tag) {
    var classElements = new Array();
    if ( node == null )
        node = document;
    if ( tag == null )
        tag = '*';
    var els = node.getElementsByTagName(tag);
    var elsLen = els.length;
    var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
    for (i = 0, j = 0; i < elsLen; i++) {
        if ( pattern.test(els[i].className) ) {
            classElements[j] = els[i];
            j++;
        }
    }
    return classElements;
}
函数getElementsByClass(搜索类、节点、标记){
var classElements=新数组();
if(node==null)
节点=文档;
if(标记==null)
标记='*';
var els=node.getElementsByTagName(标记);
var elsLen=els.长度;
var pattern=newregexp(“(^ |\\s)”+searchClass+”(\\s |$)”;
对于(i=0,j=0;i
然后您将按照如下方式重新编写您的方法

var hidden = 1;

function toggleTable(){
    var element_array = getElementsByClass('foo');
    for(i = 0; i < element_array.length; i++){
        if(hidden == 1){
            element_array[i].style.display = 'none';
        }else{
            element_array[i].style.display = '';
        }
    }

    if(hidden == 1) hidden = 0;
    else hidden = 1;
}
toggleTable();
var-hidden=1;
函数切换表(){
var element_array=getElementsByClass('foo');
对于(i=0;i
您得到的错误不是因为IE不想设置display属性,而是因为getElementsByClassName方法没有在IE中实现。如果您想实现该方法,可以使用Dustin Diaz编写的此方法

function getElementsByClass(searchClass,node,tag) {
    var classElements = new Array();
    if ( node == null )
        node = document;
    if ( tag == null )
        tag = '*';
    var els = node.getElementsByTagName(tag);
    var elsLen = els.length;
    var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
    for (i = 0, j = 0; i < elsLen; i++) {
        if ( pattern.test(els[i].className) ) {
            classElements[j] = els[i];
            j++;
        }
    }
    return classElements;
}
函数getElementsByClass(搜索类、节点、标记){
var classElements=新数组();
if(node==null)
节点=文档;
if(标记==null)
标记='*';
var els=node.getElementsByTagName(标记);
var elsLen=els.长度;
var pattern=newregexp(“(^ |\\s)”+searchClass+”(\\s |$)”;
对于(i=0,j=0;i
然后您将按照如下方式重新编写您的方法

var hidden = 1;

function toggleTable(){
    var element_array = getElementsByClass('foo');
    for(i = 0; i < element_array.length; i++){
        if(hidden == 1){
            element_array[i].style.display = 'none';
        }else{
            element_array[i].style.display = '';
        }
    }

    if(hidden == 1) hidden = 0;
    else hidden = 1;
}
toggleTable();
var-hidden=1;
函数切换表(){
var element_array=getElementsByClass('foo');
对于(i=0;i
看看投票否决这一点有什么意义?如果有一个轮子,你为什么要重新发明另一个呢?这是一个非常有效和有用的答案,特别是因为jQuery的一个主要卖点是消除这些浏览器实现的不一致性。谢谢,我非常惊讶,因为这是我回答的信息。“……”“也许你不需要那个痛苦的人!”:也许如果OP指定了他们不能使用jQuery的原因,这将是一个不好的答案,但是在这个时代,如果你可以使用jQuery来做这类事情,你真的应该认真考虑一下。如果有一个轮子,你为什么要重新发明另一个呢?这是一个非常有效和有用的答案,特别是因为jQuery的一个主要卖点是消除这些浏览器实现的不一致性。谢谢,我非常惊讶,因为这是我回答的信息。“……怎么样?”比如“也许你不需要那个痛苦的人!”:也许如果OP指定了他们不能使用jQuery的原因,这将是一个不好的答案,但是在这个时代,如果你可以使用jQuery来做这类事情,你真的应该认真考虑一下。