来自querySelectorAll的实时节点

时间:2014-01-24 02:44:09

标签: javascript internet-explorer-8

我在Firefox中使用了一个脚本,它使用了一个用getElementsByClassName提取的元素数组。 IE8不支持此方法,因此我必须替换querySelectorAll。我的问题是querySelectorAll创建一个静态列表,而不是实际元素的实时引用。

我的剧本

function subMenu(sCat,gCat,sh,gh,selection)
{
    sElements = document.querySelectorAll('cat'+sCat);
    gElements = document.querySelectorAll('cat'+gCat);

//  sElements = document.getElementsByClassName('cat'+sCat);
//  gElements = document.getElementsByClassName('cat'+gCat);

if(sh>0)
    {
    for(i=0;i<sElements.length;i++)
        {
        if(!(h = window.getComputedStyle(sElements[i],null).height)) {h=sElements[i].currentStyle;}
        nh = parseInt(h.replace("px",""))-4;
        sElements[i].style.height = nh+"px";
        }
    sh=sh-4;
    }
if(gh<100)
    {
    for(i=0;i<gElements.length;i++)
        {
        if(!(h = window.getComputedStyle(gElements[i],null).height)) {h=gElements[i].currentStyle;}
        nh = parseInt(h.replace("px",""))+4;
        gElements[i].style.height = nh+"px";
        }
    gh=gh+4;
    }
if(sh>0 || gh<100) {xMenu=setTimeout("subMenu("+sCat+","+gCat+","+sh+","+gh+",'"+selection+"')",10);}
else
    {
    fadeOut(selection);
    }
}

我已经注释掉了可以正常使用的脚本,但在IE8中却没有。我不确定getComputedStyle或currentStyle属性是否正常工作,但设置style.height属性defintiely不是。

所以我的问题:

  1. 有没有办法从IE8获取类似于getElementsByClassName的实时节点列表?

  2. 有人建议将数组从querySelectorAll转换为元素对象数组吗?

1 个答案:

答案 0 :(得分:1)

顾名思义,

querySelectorAll需要一个选择器。类以点开头,就像在CSS中一样:

sElements = document.querySelectorAll('.cat'+sCat);
                                      -^-

将其转换为真实数组:

realArray = Array.prototype.slice.call(pseudoArray);