Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改类样式时出错_Javascript_Class_Styling - Fatal编程技术网

Javascript 更改类样式时出错

Javascript 更改类样式时出错,javascript,class,styling,Javascript,Class,Styling,我收到代码错误无法使用此函数获取未定义或空引用的属性“style”。我正在设置数组中所有元素的样式 为了记录在案,这里的所有答案都没有解决这个问题。如果你看代码,很明显最大的问题是花括号,一个是向后的,还有一个是额外的。一个向后的是一个大问题,为什么我会出错,为什么警报工作,因为警报是在读取错误之前调用的。”我想 我知道我遗漏了一些简单的东西,这也是我发布这篇文章的原因。我在这里看到的大多数编程问题都是语法错误,当事情不起作用时,这也是我的主要问题 一直以来都是低代表,所以请添加您的投票。谢谢

我收到代码错误
无法使用此函数获取未定义或空引用的属性“style”。我正在设置数组中所有元素的样式

为了记录在案,这里的所有答案都没有解决这个问题。如果你看代码,很明显最大的问题是花括号,一个是向后的,还有一个是额外的。一个向后的是一个大问题,为什么我会出错,为什么警报工作,因为警报是在读取错误之前调用的。”我想

我知道我遗漏了一些简单的东西,这也是我发布这篇文章的原因。我在这里看到的大多数编程问题都是语法错误,当事情不起作用时,这也是我的主要问题

一直以来都是低代表,所以请添加您的投票。谢谢

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
        }
    }
}

我已尝试更改引号并删除引号,从而将错误更改为未定义的函数。

数组索引以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";
        }
    }
}

您使用的索引等于数组的大小,因此变量
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";
        }
    }
}

您认为此导航器字符串将匹配多少用户?不要使用用户代理检测!
i=x.length;if(i==x.length)
-嗯???不,阅读文章,函数工作,条件返回true。同时阅读此内容,还有更多内容备份我的代码,我正在更改类的样式,而不是单个元素。我确实想知道是否需要重新定义I变量。如果根据返回true的条件,您在代码中引用这一行:
如果(i==x.length)
,那么它显然总是会返回
true
。看看你的代码:前面的语句是
i=x.length
。你首先给一个变量赋值,然后检查该变量是否有该值。很明显,这总是真的。我要说的是
x.length
的值是错误的。我如果您只想使用具有该类的最后一个项,那么它应该是
x.length-1
。如果您想使用“getElementsByClassName”找到的所有元素,那么应该使用
for
循环。