Contenteditable div текст get добавляется в элемент span, а не снаружи - PullRequest
1 голос
/ 12 марта 2020

У меня проблема с моим довольным делом. Когда я нажимаю на кнопку, в мой блок вставляется интервал. Когда я начинаю печатать, текст идет внутри промежутка, а не за его пределами:

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>

Это действительно странная вещь. А также, когда я добавляю смайлики, удаляю содержимое и что-то набираю, элемент <font> get создается в стиле смайликов. Кто-нибудь знает, как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 12 марта 2020

Просто добавьте contenteditable="false" на ваш span.

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>
0 голосов
/ 12 марта 2020

Вы должны использовать тег img для вставки смайликов, я настоятельно рекомендую взглянуть на telegram web или другое веб-приложение чата, чтобы узнать, что вы должны делать с обработкой смайликов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...