0

我正在按照 codepen除了计数之外构建单词计数器模块的示例,我需要将输入限制为 30 个单词,这样用户就不能再写了。我不知道在哪里实现我需要的东西。我想我可以使用类似 splice(begin, end) 的东西。

这两个正在做数词的事情:

calculate() {
   let text = this.quill.getText();
   if (this.options.unit === 'word') {
     text = text.trim();
     return text.length > 0 ? text.split(/\s+/).length : 0
   } else {
    return text.length;
   }
 }

 update() {
   var length = this.calculate();
   var label = this.options.unit;
   if (length !== 1) {
     label += 's';
   } 
 this.container.innerHTML = length + ' ' + label;
 }

我不知道是否必须添加新方法或修改这两个方法之一。就像是:

limitWords() {
  let text = this.quill.getText();
  if (text.length > 30) {
     text = text.splice(0, 30);
  }
  return text.length;
}

这显然失败了,任何指导将不胜感激!

更新

感谢@maioman,我得到了我需要的更接近的方法,通过执行以下操作,我可以将单词“限制”为 30。

问题

如果我继续输入预览词消失,然后我在输入字段中得到一个未定义的:

update() {
var length = this.calculate();
if (length > 30) { 
  this.restrict();
}
var label = this.options.unit;
if (length !== 1) {
  label += 's';
}
 this.container.innerHTML = length + ' ' + label;
}

restrict() {
  let text = this.quill.getText();
  text = text.replace(/\s+.+/);
  this.quill.setText(text);
  this.update()
 } 

我尝试了什么:

let text = this.quill.getText().slice(0, 30); 

这不会引发未定义,但它不起作用。

4

0 回答 0