substring javascript根本不工作

时间:2012-11-17 20:19:52

标签: 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"

 }

3 个答案:

答案 0 :(得分:3)

首先,.substring(和.substr)是从0开始的,而不是从1开始的。

.substring提取两个位置之间的字符串。例如。 .substring(1,4)返回第2个,第3个和第4个字符。它将停在第4位。

.substr根据start + length提取字符串。 .substr(1,4)返回以第二个字符开头的前4个字符。

答案 1 :(得分:1)

var theString = caseString.substring(1, 2);应该只返回lsubstring方法接受子字符串的开头作为第一个参数,并接受子字符串结尾的第二个参数。你给它索引1这是第二个字符(0是第一个字符)。

您可能误将substringsubstr弄错了。 substr接受作为第一个参数的起始索引和长度作为秒。所以:

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

给出你想要的结果。

答案 2 :(得分:1)

substring是0索引的,所以你应该做这样的事情:

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

另请注意.slice()做同样的事情,但实际上更强大,因为它可以向后和向前计数。

要解决您的新问题,我建议您做一些事情:

  1. 您需要缓存长度值。 getElementsByTagName返回的列表是实时的,这意味着在您循环时对列表所做的任何更改都会影响该值,因此它不会像您期望的那样运行。
  2. 不要使用new Array()过于花哨。
  3. 您不需要实例化您将要定义的变量。
  4. 试试这个:

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

    在stackoverflow中的这个页面上运行时,这适用于我的Firefox: sample result