【问题标题】:contenteditable span Alternativecontenteditable span 替代方案
【发布时间】:2020-03-30 17:36:46
【问题描述】:

我能够在一些文本中创建一个contenteditable 跨度,该跨度可以增长和缩小,并且可以在不占用整个宽度的情况下换行多行:

div {
  width: 100px;
  background: #f00;
  padding: 5px;
}

span {
  border: 1px solid #000;
}
<div>
  <span contenteditable="true">Type Something</span>
</div>

我知道contenteditable 的问题和挑战,我只想要纯文本。因此,我想使用&lt;input type="text"&gt; 来完成此操作。有没有我可以应用的 CSS/JS 让它表现得像这样,而无需通过多个输入字段以编程方式模拟它?

澄清

textareadisplay: inline-block 并使其内联并不能真正使其像 span 元素那样内联,因此它不是我正在寻找的替代方案

【问题讨论】:

    标签: javascript html css contenteditable


    【解决方案1】:

    我以前不得不这样做,并且基本上重新发明了 textarea,其中每行的 div 和光标的跨度和其他一些样式。

    这是基本的想法:

    let $ = document.querySelector.bind(document);
    let text = 'Type Soemthing';
    let cursor = text.length;
    
    let updateDisplay = () => {
      $('#pre-text').textContent = text.substr(0, cursor);
      $('#post-text').textContent = text.substr(cursor);
    };
    
    document.addEventListener('keyup', e => {
      switch (e.key) {
        case 'ArrowLeft':
          cursor--;
          break;  
        case 'ArrowRight':
          cursor++;
          break;  
        case 'Backspace':
          text = text.substr(0, cursor - 1) + text.substr(cursor);
          cursor--;
          break;
        case 'Delete':
          text = text.substr(0, cursor) + text.substr(cursor + 1);
          break;
        default:
          if (e.key.length === 1) {
            text = text.substr(0, cursor) + e.key + text.substr(cursor);
            cursor++;
          }
      }
      updateDisplay();
    });
    
    updateDisplay();
    div {
      width: 100px;
      border: 1px solid #f00;
      padding: 5px;
    }
    
    span#cursor {
      background: #000;
      width: 1px;
      height: 1em;
      display: inline-block;
    }
    <div>
      <span id="pre-text"></span>
      <span id="cursor"></span>
      <span id="post-text"></span>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-05
      • 2010-09-10
      • 2012-12-05
      • 2013-11-22
      • 2020-11-23
      • 2013-08-07
      • 2015-09-11
      • 2021-06-14
      相关资源
      最近更新 更多