2013-04-02 41 views
0

我有一个方法返回给定id模式的跨度数组。这个数组确实被创建,并且当我通过在函数结尾处打印出数组的值来测试时,所有正确的元素似乎都在其中。函数创建跨度数组总是返回未定义

这是函数:

function getAllSpansForID(sectionID) { 
    var foundAllSpans = false, 
     i = 1, 
     spanID, 
     span, 
     spanArray = new Array(); 

    /* Keep looking until we found all the selection spans.*/ 

    while (!foundAllSpans) { 
     spanID = sectionID + "-" + i; 
     span = document.getElementById(spanID); 

     /* 
     If we didn't get a span we can assume there are no more to find. 
     We are done with this loop. 
     */ 
     if (span == null) { 
      foundAllSpans = true; 
      console.log("Found all spans."); 
     } 

     /* 
     Else, add the span to the array we are going to return. 
     */ 
     else { 
      spanArray[i-1] = span; 
      i++; 
     } 
    } 

    console.log("returning spanArray.length: " + spanArray.length); 
    for (i = 0; i < spanArray.length; i++) { 
     console.log("spanArray[i].id: " + spanArray[i].id); 
     console.log("spanArray[i].outerHTML: " + spanArray[i].outerHTML); 
    } 

    return spanArray; 
} 

我的问题是,每当我调用该函数返回的值始终是不确定的。

此代码:

var spansArray = getAllSpansForID(verseID), 
length = spansArray.length; 

总会产生这样的错误:

Uncaught ReferenceError: spansArrray is not defined 

我发现有很多类似的问题对SO与returnign阵列由于划定范围的问题,但没有符合我的确切情况。我试图改变这种方法,包括使用spanArray.push(span)spanArray.push.apply(spanArray, span)添加我的跨度,但无济于事。我没有想法。

+3

为什么功能命名一次getAllSpansForID和另一个getAllSelectionSpansForVerse?那真的是一样的吗? –

+2

'spanArray!== spansArrray' – Andreas

+4

@Andreas它们在函数内部称为'spanArray',在外面称'spansArray',所以应该没问题。 – Xymostech

回答

1

在错误消息我能发现的r太多:

似乎又是错字,而不是在你这里张贴的代码,但在你执行一个...

0

变化:

var spansArray = getAllSpansForID(verseID); 
var length = spansArray.length; 
+0

没有区别。 – Bergi

+0

复制我的代码并尝试。应该有区别! –

+0

好的,那也可以解决OP的错误:-)但是他的问题没有什么功能上的差异。 – Bergi

0

D'OH!

你可以通过我的错误信息看,spansArrray(3 R的)是不确定的。我定义了spansArray(2个)。我修好了,一切正常。只是一个错字....

我没有举起length = spansArray.length;直接从代码,而只是写出来,所以这里发布的代码不会失败。

对不起大家。我感谢所有的帮助一样!