类样式更改出错

时间:2014-05-08 02:18:27

标签: javascript class styling

我使用此函数收到代码Unable to get property 'style' of undefined or null reference的错误。我正在设置数组中所有元素的样式。

对于记录,所有答案都没有解决此问题。如果你看一下代码,很明显最大的问题是花括号,一个是向后的,还有一个额外的。一个向后是一个大问题,为什么我得到错误和为什么警报工作,因为在读错误之前调用警报“。我认为。

我知道我错过了一些简单的东西,这就是我发布这个的原因。我在这里看到的大多数编程问题都是语法错误,当事情不起作用时,我的大多数问题都是。

一直工作低代表,所以请加上你的投票。谢谢。

function marc()
{
    if(navigator.appVersion === "5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR    2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko")
    {
        var x=document.getElementsByClassName('nav_top'), i=x.length;
        if(i===x.length)
        {
            // alert("works now); this works
            x[i].style.margin = "0px -2.2px -1px -2.2px";//this line pulls the error
        }
    }
}

我尝试更改引号并删除引号,将错误更改为函数undefined。

2 个答案:

答案 0 :(得分:0)

数组索引以0开头,设置i = x.length,如果x.length = 3,则i = 3。 x [3]超出范围。只有x [0],x [1],x [2]。

因此,如果要使用数组中的最后一个元素,请设置i = x.length - 1.或使用x [i-1]。如果(i === x.length)是多余的。

function marc()
{
    if(navigator.appVersion === "5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR    2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko")
    {
        var x=document.getElementsByClassName('nav_top'), i=x.length;
        if(x.length !== 0)
        {
            x[i-1].style.margin = "0px -2.2px -1px -2.2px";
        }
    }
}

答案 1 :(得分:0)

您使用的索引等于数组的大小,因此变量x[i]将始终具有空值(因为数组的索引从0变为size-1)。如果要访问数组中的最后一个元素,则应使用x.length - 1而不是x.length 您还应验证该数组是否包含至少一个元素。因此,清理代码将变为:

function marc() {
    if (navigator.appVersion === "5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR    2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko") {
        var x = document.getElementsByClassName('nav_top');
        if (x.length > 0) {
            x[x.length - 1].style.margin = "0px -2.2px -1px -2.2px";
        }
    }
}