有什么理由说这不起作用?
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"
}
答案 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);
应该只返回l
。 substring
方法接受子字符串的开头作为第一个参数,并接受子字符串结尾的第二个参数。你给它索引1这是第二个字符(0是第一个字符)。
您可能误将substring
与substr
弄错了。 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()做同样的事情,但实际上更强大,因为它可以向后和向前计数。
要解决您的新问题,我建议您做一些事情:
getElementsByTagName
返回的列表是实时的,这意味着在您循环时对列表所做的任何更改都会影响该值,因此它不会像您期望的那样运行。new Array()
过于花哨。试试这个:
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: