根据MDN, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr substr
被认为是最终可能被弃用的遗留代码。
因此我想知道是否substring
or slice
更适合将字符串插入到特定索引处的其他字符串中?
或者是否有另一种方法实际上是为了这个目的?
我正在做的是通过检测用户输入keydown
,然后在某些情况下,我会拦截并推断以手动传递该值。
input.onkeydown = function(e){
if (e.key === 'x'){
return false
}
this.value = // insert character at this.selectionEnd into this.value
return false
}
我这样做的原因是这样我可以管理和限制用户输入,同时保证输出以特定方式格式化。换句话说,用户不必格式化他/她的输入。
它们之间的区别is https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring#Differences_between_substring()_and_slice():
如果indexStart大于indexEnd,substring()方法会交换它的两个参数,这意味着仍然返回一个字符串。如果是这种情况,slice() 方法将返回一个空字符串。
如果其中一个或两个参数为负数或 NaN,则 substring() 方法将它们视为 0。
slice() 还将 NaN 参数视为 0,但当给定负值时,它会从字符串末尾向后计数以查找索引。
因为您已经有对该字符串的引用this.value
,并且由于您可以直接计算下索引和上索引(无需传递负索引或 NaN,或类似的任何愚蠢的东西),因此无论您是否使用都绝对没有区别substring
or slice
如果你想插入一个特定的字符。你想用哪个就用哪个,对于这样的操作不会有任何影响。
this.value = this.value.slice(0, selectionEnd) + 'z' + this.value.slice(selectionEnd);
or
this.value = this.value.substring(0, selectionEnd) + 'z' + this.value.substring(selectionEnd);
两者都工作正常。
input.onkeydown = function(e){
const { selectionEnd } = this;
this.value = this.value.substring(0, selectionEnd) + 'z' + this.value.substring(selectionEnd);
this.selectionEnd = selectionEnd + 1;
return false;
}
<input id="input" value="abc">
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)