javascript - Contenteditable div 文本被添加到 span 元素中而不是外部

标签 javascript jquery html

我的 contenteditable div 有问题。当我单击按钮时,一个跨度就会插入到我的 div 中。当我现在开始输入时,文本会进入范围内,而不是超出范围:

jQuery(document).ready(function($) {
  let input = $("#input");

  input.on("input", function() {
    console.log($(this).html().length);
    
    // Contenteditable adds a <br> when empty.
    // Solutions on SO appear not to work
    if (!$(this).text()) {
      input.html('');
    }
  });

  $("button").click(function() {
    input.html(input.html() + `<span class="emoji">😅</span>`);
    input.trigger('input');
  });
});
[contenteditable=true] {
  border: 1px solid #aaaaaa;
  padding: 8px;
  border-radius: 12px;
  margin-bottom: 20px;
}

[contenteditable=true]:empty:before {
  content: attr(placeholder);
  display: block;
  color: #aaaaaa;
}

.emoji {
  color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="input" placeholder="Schreib eine Nachricht..." contenteditable="true" spellcheck="true"></div>
<button>Add element to contenteditable div</button>

这真是一件奇怪的事情。另外,当我添加表情符号时,删除内容并输入一些内容,a <font>元素 get 是用表情符号的风格创建的。有谁知道我该如何解决这个问题?

最佳答案

只需在您的 span 上添加 contenteditable="false" 即可。

jQuery(document).ready(function($) {
  let input = $("#input");

  input.on("input", function() {
    console.log($(this).html().length);
    
    // Contenteditable adds a <br> when empty.
    // Solutions on SO appear not to work
    if (!$(this).text()) {
      input.html('');
    }
  });

  $("button").click(function() {
    input.html(input.html() + `<span class="emoji" contenteditable="false">😅</span>`);
    input.trigger('input');
  });
});
[contenteditable=true] {
  border: 1px solid #aaaaaa;
  padding: 8px;
  border-radius: 12px;
  margin-bottom: 20px;
}

[contenteditable=true]:empty:before {
  content: attr(placeholder);
  display: block;
  color: #aaaaaa;
}

.emoji {
  color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="input" placeholder="Schreib eine Nachricht..." contenteditable="true" spellcheck="true"></div>
<button>Add element to contenteditable div</button>

关于javascript - Contenteditable div 文本被添加到 span 元素中而不是外部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60653192/

相关文章:

javascript - 获取两个字符串之间的组

javascript - ios 的 Phonegap 插件...javascript 部分

javascript - AngularJS,多个可拖动项目在初始移动时导致 'jump'

javascript - 更改 jQuery 滑动切换上的按钮样式

jquery - 谷歌地图不显示

javascript - 获取组件的实际宽高

javascript - Java Script 从服务器(asp.net)获取数据并将其保存在本地存储(客户端)

javascript - 使用 splice() 方法反转数组

javascript - Jquery - 停止鼠标锁定位置 :absolute from extending page?

javascript - 获取每个跨度的最后一个单词的第一个字母