我正在尝试创建一个跨浏览器animationListener,并且该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);
}
}
Run Code Online (Sandbox Code Playgroud)
试试你看到:
listener = "animationend";
listener.substr(9, 10); // returns "end";
Run Code Online (Sandbox Code Playgroud)
为什么?
substr函数的第二个参数是要提取的字符数(长度).第一个参数设置从哪里开始.您可以在文档中阅读更多内容.
所以你的代码行:listener.substr( 9, 10 );基本上说"从第9个索引给我10个字符".但是,由于在第9个索引之后根本没有10个字符,因此该命令将返回它可以执行的所有字符串的其余部分.
要在第9个索引之后只提取一个字符,您只需使用以下命令:
listener.substr( 9, 1 );
Run Code Online (Sandbox Code Playgroud)
或者,如果要在两个索引之间提取字符串,可以使用以下substring()函数:
listener.substring( 9, 10 );
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下你可以使用:
listener.substr(9, 1);
Run Code Online (Sandbox Code Playgroud)
要么
listener.substring(9, 10);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |