使用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来做这类事情,你真的应该认真考虑一下。