显示和隐藏div';s javascript可以在IE中工作,但不能在FF或Chrome中工作

显示和隐藏div';s javascript可以在IE中工作,但不能在FF或Chrome中工作,javascript,firefox,javascript-events,Javascript,Firefox,Javascript Events,我有很多跨度(准确地说是20跨),它们都有Id。 然后在样式表中将可见性设置为“隐藏” 我制作此脚本是为了在单击图像地图的一部分时显示和隐藏这些跨距: function showDiv(pass) { var divs = document.getElementsByTagName('span'); for (i = 0; i < divs.length; i++) { if (divs[i].id.match(pass)) {

我有很多跨度(准确地说是20跨),它们都有Id。 然后在样式表中将可见性设置为“隐藏”

我制作此脚本是为了在单击图像地图的一部分时显示和隐藏这些跨距:

function showDiv(pass) {
    var divs = document.getElementsByTagName('span');    
    for (i = 0; i < divs.length; i++) {
        if (divs[i].id.match(pass)) {
            (pass).style.visibility = 'visible';
            divs[i].style.visibility = 'hidden';
        }          
    }
} 
函数showDiv(通过){
var divs=document.getElementsByTagName('span');
对于(i=0;i
它在IE中工作得很好,但FF不动,Chrome显示的很好,我想我可以解决一些小问题

有人知道为什么FF不接受吗? 如有任何建议,我们将不胜感激,并在以后的生活中予以补偿:)

编辑

这是我的消息来源


这是因为您传入了一个字符串,然后将其用作元素引用。IE必须足够聪明,能够搜索DOM并找到ID与字符串匹配的元素

试试这个

if (divs[i].id.match(pass)) {
    document.getElementById(pass).style.visibility = 'visible';
    divs[i].style.visibility = 'hidden';
}
if (divs[i].id.match(new RegExp(pass, 'gi'))) {
函数可能需要一个RegExp。如果上述方法无法解决您的问题,请尝试此

if (divs[i].id.match(pass)) {
    document.getElementById(pass).style.visibility = 'visible';
    divs[i].style.visibility = 'hidden';
}
if (divs[i].id.match(new RegExp(pass, 'gi'))) {

pass
是一个ID。在Firefox中,DOM中的元素ID不能作为全局引用。您不能执行id
.style.visibility='visible'相反,您的函数应该如下所示:

function showDiv(pass) {
    var divs = document.getElementsByTagName('span');    
    for (i = 0; i < divs.length; i++) {
        if (divs[i].id.match(pass)) {
            divs[i].style.visibility = 'hidden';
        }          
    }
    document.getElementById(pass).style.visibility = 'visible';
}
函数showDiv(通过){
var divs=document.getElementsByTagName('span');
对于(i=0;i
您应该能够在循环外部设置
可见性
,因为您只需要执行一次

    if (divs[i].id.match(pass)) {
pass
真的是正则表达式吗?在这里使用
match
似乎不寻常

        (pass).style.visibility = 'visible';
无论pass是字符串还是正则表达式,这都没有意义;两者都没有
样式
属性。将变量放在括号中没有效果。它在包括IE在内的任何浏览器中都不起作用

我猜你的意思是:

function showDiv(pass) {
    var divs= document.getElementsByTagName('span');    
    for (var i= 0; i<divs.length; i++)
        divs[i].style.visibility= divs[i].id==pass? 'visible' : 'hidden';
}
函数showDiv(通过){
var divs=document.getElementsByTagName('span');

对于(var i=0;i@Chaos:他可能真的想更改
可见性
,因为他可能希望
隐藏的
跨距在布局中占据空间,只是不想出现。是的,我尝试过在IE中仍然有效,但在FF中不起作用。我不知道为什么。@rockstaid:你不能在Firefox中使用全局变量引用元素。请参见Josh的答案或我的答案了解更多详细信息。是的,匹配需要一个正则表达式,对于IE和Chrome,RegExp代码很好地清理了它,但对于FF仍然没有结果。我开始认为它无法识别:document.getElementsByTagName('span'))FF肯定能识别
getElementsByTagName
。您(一起)尝试了我在回答中提到的两件事吗?