var alldivstamp = document.getElementsByClassName("divs");
for(var i = 0; i < array.length; i++){
if(array[i-1].getAttribute("data") > 1){
//error here = TypeError: array[(i - 1)] is undefined
}
}
错误输出:&#34; TypeError:array [(i - 1)]未定义&#34;
for(var i = 0; i < array.length; i++){
if (typeof foo !== 'undefined') {
if(array[i-1].getAttribute("data") > 1){
//error here = TypeError: array[(i - 1)] is undefined
}
}
}
这没有解决它
for(var i = 0; i < array.length; i++){
if (typeof foo !== 'undefined' && i < 1 && i > array.length-1) {
if(array[i-1].getAttribute("data") > 1){
//error here = TypeError: array[(i - 1)] is undefined
}
}
}
这里也是错误
undefined value in if statement breaks for loop
这是数据结构
<div class="divs"></div>
<div class="divs"></div>
<div class="divs"></div>
.....
当i = 0时,它在索引中检查-1&#34;因此,数组索引不存在,以便循环停止&#34;
解决方案:
for(var i = 0; i < array.length; i++){
if (i > 0) {
if(array(i-1).getAttribute("data") > 1){
//do ...
}
}if(i == 0){
//do ...
}
}
成功!
错误:(TypeError:&#34; x&#34; is(not)&#34; y&#34;)
TypeError: "x" is (not) "y"
Examples:
TypeError: "x" is undefined
TypeError: "x" is null
TypeError: "undefined" is not an object
TypeError: "x" is not an object or null
TypeError: "x" is not a symbol
答案 0 :(得分:1)
根据document.getElementsByClassName
,你得到一个像元素一样的数组。
您可以使用索引来访问
项目array[i]
对于属性,您可以使用点表示法,例如
array[i].foo
或括号表示法
array[i]['foo']
或类似getAttribute
的方法。
array[i].getAttribute('data')
一个有效的循环,可能是这个
array = document.getElementsByClassName("divs");
for (var i = 0; i < array.length; i++){
if (array[i].getAttribute('data')) { // check for truthyness
// do something
}
}
答案 1 :(得分:1)
你的循环没有运行。像:
var i = 0; i < array.length; i++
但是这样跑:
var i = 0; i <= array.length; i++
从错误中解决这个问题:
for(var i = 0; i <= array.length; i++){
var data = array[i];
if(data){
if(data.getAttribute("data") > 1){
// your code
}
}
}
或
for(var i = 1 ; i <= array.length + 1; i++){
var data = array[i - 1];
if(data){
if(data.getAttribute("data") > 1){
// your code
}
}
}
答案 2 :(得分:0)
数组中的索引从0开始。当i = 0时,数组(i-1)等于未定义的数组(-1)。顺便说一下,获取数组值,使用方括号,而不是圆括号。例如。 ARR [1]
所以你应该使用:
src
答案 3 :(得分:0)
对于第一次迭代 i=0
,然后是array[i-1] = array[-1]
。 这不存在。
这可能是这样的
for(var i = 1; i < array.length; i++){
if(array[i-1].getAttribute("data") > 1){
//success
}
}
或者
for(var i = 0; i < array.length; i++){
if(array[i].getAttribute("data") > 1){
//success
}
}
答案 4 :(得分:0)
你的DOM选择器根据你的&#34; divs&#34;返回一个数组。类。这是你需要为你的点长度做的数组。
您正在检查该元素是否具有该属性。你应该使用&#34; hasAttribute&#34;方法
你的代码......
var alldivstamp = document.getElementsByClassName("divs");
for(var i = 0; i < array.length; i++){
if(array[i-1].getAttribute("data") > 1){
//error here = TypeError: array[(i - 1)] is undefined
}
}
应该......
var alldivstamp = document.getElementsByClassName("divs");
for(var i = 0; i < alldivstamp.length; i++){
if(alldivstamp[i].hasAttribute("data") === false){
//error here = TypeError: array[(i - 1)] is undefined
}
}
答案 5 :(得分:0)
for(var i = 0; i < array.length; i++){
if (i > 0) {
if(array(i-1).getAttribute("data") > 1){
//do ...
}
}if(i == 0){
//do ...
}
}