1

我正在尝试创建一个跨浏览器动画侦听器,但该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";

为什么?

4

2 回答 2

6

substr函数的第二个参数是要提取多少个字符(长度)。第一个参数设置从哪里开始。您可以在文档中阅读更多信息。

所以你的代码行:listener.substr( 9, 10 );基本上说“给我第 9 个索引中的 10 个字符”。但是,由于在第 9 个索引之后根本没有 10 个字符,因此该命令将返回它可以返回的所有内容,即字符串的其余部分。

要在第 9 个索引之后仅提取一个字符,您只需使用以下命令:

listener.substr( 9, 1 );

或者,如果要在两个索引之间提取字符串,可以使用substring()函数

listener.substring( 9, 10 );
于 2013-08-18T14:57:14.597 回答
5

substr和之间的区别substring是:

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);
于 2013-08-18T15:02:32.723 回答