【问题标题】:Get all text before SelectionStart and after SelectionEnd获取 SelectionStart 之前和 SelectionEnd 之后的所有文本
【发布时间】:2018-08-11 07:16:54
【问题描述】:

我正在从头开始创建一个文本编辑器。

加粗代码

$('#bold').click(function(){

            var start = window.getSelection().toString();

            var bolded = '<b>' + start + '</b>';
            var cursorPositionBegin = $('#TextEditor').prop("selectionStart");
            var cursorPositionEnd = $('#TextEditor').prop("selectionEnd");
// to check 
                alert(bolded);
            })  

HTML 代码

<table width="50%">
    <tr>
        <td>
            <div>
                <div>
                    <span><input type=button value="B" id="bold"></span>
                </div>
                <div contenteditable="true">
                    <textarea cols="47" rows="23" placeholder="editor" id="TextEditor"></textarea>
                </div>
            </div>  
        </td>
    </tr>
</table>

当我为一组选定的字符单击#bold 时,我想在#TextEditor 中添加characters。我想也许获取光标的开始和结束位置可以帮助分解并将开始和结束与 characters 一起形成我需要的内容。

我也使用 jQuery

[更新 1] 还是有其他方法可以满足我的要求? [更新 2] 将contenteditable="true" 添加到放置#TextEditor id 的div 中

您的帮助将不胜感激。

【问题讨论】:

  • 你想在开始前和结束后添加什么文字?
  • 在#TextEditor 中输入的任何内容,我想在输入的文本中进行粗体选择。
  • textarea 将不支持其中的任何其他元素!
  • &lt;textarea&gt; 元素不允许您在其中添加&lt;b&gt; 标签,您必须使用contenteditable="true" div 作为您的requiremnet。
  • 我的意思是,如果您打算使用&lt;textarea&gt; 作为编辑器,则不会应用粗体样式,因为您必须在 div 中使用 contenteditable 并实现你的编辑器到那个 div。

标签: javascript jquery


【解决方案1】:

正如@webBer 所说,您将不允许在 textarea 元素中添加标签,而是使用属性为 contenteditable="true" 的 div

$('#bold').click(function(){
  var string = window.getSelection().toString();
  var bolded = '<b>' + string + '</b>';
  var selC, range;
      if (window.getSelection) {
          selC = window.getSelection();
          if (selC.rangeCount) {
              range = selC.getRangeAt(0);
              range.deleteContents();
              range.insertNode(document.createTextNode(bolded));
          }
      } else if (document.selection && document.selection.createRange) {
          range = document.selection.createRange();
          range.text = bolded;
      }
}); 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table width="50%">
    <tr>
        <td>
            <div>
                <div>
                    <span><input type=button value="B" id="bold"></span>
                </div>
                <div contenteditable="true" style="height: 300px;width: 300px;border: 1px solid black">
                    
                </div>
            </div>  
        </td>
    </tr>
</table>

【讨论】:

  • 好兄弟.. 但不要将其生成为文本,生成为粗体 HTML。
  • @X10nD 如果你有你应该在你的问题中提到过,你在 StackOverflow 方面很有经验,所以你应该知道发布问题的方法。没关系,您可以根据需要使用此代码转换此答案。
  • @webBer 你是对的,但我想自己努力让代码正常工作,然后过来问一个问题 :)
猜你喜欢
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-06
  • 1970-01-01
相关资源
最近更新 更多