2012-11-17 96 views
0

有沒有任何理由爲什麼這不起作用?substring javascript不工作

 var caseString = "sliderInput"; 
    var theString = caseString.substring(1, 2); 

我把它通過在Firefox的Firebug調試器,它是給我的錯誤:「無效的分配左側」

* *這是我確切的代碼

 var elements = new Array(); 
     elements = document.getElementsByTagName("Input"); 


var allSliderInputs = new Array(); 
var sliderParams = new Array(); 
var first, last, inc, style; 

for (var i=0; i < elements.length ; i++){ 
    var c = elements[i].className; //works fine here 
    var t = c.substring(0, 2); //when it hits this line it says "invalid assignment left-hand side" 

} 
+2

否... theString =「l」 –

+6

這不是導致錯誤的代碼。這是有效的。查看它之前的代碼以確定您的無效賦值。 –

+0

好吧,我現在看到它爲什麼是l而不是sl。但重要的是它根本不起作用。 – user1066524

回答

1

substring是0索引,所以你應該不是做這樣的事情:

var word = "slider"; 
var part = word.substring(0,2); // sl 

還注意到,.slice()做同樣的事情,但實際上更強大,因爲它可以作爲前鋒計數向後也是如此。

爲您解決新的問題,我建議幾件事情:

  1. 需要緩存的長度值。由getElementsByTagName返回的列表是實時的,意味着當您循環時對列表進行的任何更改都會影響該值,因此它不會像您期望的那樣運行。
  2. 請勿使用new Array()這太過於花哨。
  3. 您不需要實例化即將定義的變量。

試試這個:

var elements = document.getElementsByTagName("input"); 
var allSliderInputs = []; 
var sliderParams = []; 
var len = elements.length; 
var first, last, inc, style, c, t, i; 

for (i = 0; i < len; i++) { 
    c = elements[i].className; //works fine here 
    t = c.substring(0, 2); 
    console.log(t); 
} 

當計算器這很頁面上運行此工作正常,我在Firefox: sample result

+0

是啊,它仍然無法正常工作。我以這個問題爲例。但這是我的確切代碼。 var elements = new Array(); elements = document.getElementsByTagName(「Input」); var allSliderInputs = new Array(); var sliderParams = new Array(); var first,last,inc,style;對於(var i = 0; i user1066524

+0

所以強制性的,jquery可以在1行註釋中做到這一點可能在這裏保證。'$('input')。each(函數(){var t = this.className.subString(0,2);})' –

+0

感謝您的幫助,事實證明螢火蟲並沒有給我一個準確的控制檯錯誤。與子字符串.....當它的現實所有它真的是..是我在80號線如果聲明缺少==。 – user1066524

1

var theString = caseString.substring(1, 2);應該回到你剛纔lsubstring方法接受作爲第一個參數的子字符串的開始和作爲第二個參數的子字符串的結尾。你給它索引1這是第二個字符(0是第一個)。

您可能誤以爲substringsubstrsubstr接受第一個參數起始索引和長度作爲第二個參數。所以:

var caseString = "sliderInput"; 
var theString = caseString.substr(0, 2); //sl 

是給你想要的結果。

3

首先,.substring(和.substr)爲0〜基於,不是基於1的。

.substring提取兩個位置之間的字符串。例如。 .substring(1,4)返回第2,3,4個字符。它將在位置4處停止。

.substr根據起始長度提取字符串。 .substr(1,4)返回從第2個字符開始的前4個字符。

+0

好吧,我現在看到我錯誤地認識到它基本上是基於零而不是一個基礎的,但爲什麼調試器首先嘲笑它呢?它在接近子字符串方法時發生。 – user1066524