2

有什么理由为什么这不起作用?

     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"

 }
4

3 回答 3

3

substring是 0-indexed 所以你应该做这样的事情:

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

当在stackoverflow的这个页面上运行时,这对我来说在Firefox中很好用: 样本结果

于 2012-11-17T20:24:15.570 回答
3

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

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

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

于 2012-11-17T20:25:18.910 回答
2

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

您可能误认为substring. 接受作为第一个参数开始索引和长度作为第二个。所以:substrsubstr

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

正在给出你想要的结果。

于 2012-11-17T20:24:11.173 回答