2013-08-18 27 views
1

我正在尝试创建一个跨浏览器animationListener,并且有一个substr函数的问题!Javascript substr问题

function animationEventListener(elem, listener, callback){ 
     if(!elem){return;} 

    if(listener.length < 0){ console.error("Add event type listener"); } 

    listener = listener.toLowerCase(); 

    var _prefix = ["", "o", "webkit", "MS"]; 
    var _anmkeyword = new String("animation"); 
    var _keywordlength = _anmkeyword.length; 
    var _nlistener; 

    for(var i = 0; i < 4; i++){ 
     if(_prefix[i] == "MS" || _prefix[i] == "webkit"){ 
      var _ol = _keywordlength + 1; 
      _nlistener = listener.substr(0, 1).toUpperCase() 
       + listener.substr(1, listener.length - (listener.length - _keywordlength)-1) 
       + listener.substr(9, 10).toUpperCase() 
       + listener.substr(_keywordlength+1, listener.length); 
     }  
     console.log(_prefix[i] + listener + "\n" + _nlistener); 
    } 

} 

尝试它,你看:

listener = "animationend"; 
listener.substr(9, 10); // returns "end"; 

为什么?

+0

你期待什么结果呢? –

+2

你可能想要使用'substring'方法。查看[文档](http://www.w3schools.com/jsref/jsref_substring.asp),可能会有所帮助。 – prtksxna

+0

在这个代码substr需要结果一个字母“e”,但他返回“结束”,为什么? –

回答

6

substr函数的第二个参数是提取多少个字符(长度)。第一个参数设置从哪里开始。你可以阅读更多here in the documentation

所以你的代码行:listener.substr(9, 10);基本上说“给我从第9个索引中的10个字符”。但是,由于第9个索引后面没有10个字符,该命令将返回所有可以使用的字符串的剩余部分。

要提取的第9索引之后只有一个字符,所有你需要做的就是使用此命令:如果你想提取两个指标之间的串

listener.substr(9, 1); 

或者,你可以使用所述substring() function

listener.substring(9, 10); 
5

substrsubstring之间的区别是:

text.substr(a, b); //a=index to start, b=amount of letters to capture 

text.substring(a, b); //a=index to start, b=index to stop 

所以你的情况,你可以使用:

listener.substr(9, 1); 

listener.substring(9, 10);