2013-08-18 57 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);