2012-11-17 53 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