(я только подтвердил, что это произошло до сих пор с Safari 12.1.2 на MacOS Mojave)
Итак, у меня есть спорный div со стилизованным промежутком (красным) и некоторым текстом внутри него. Ничего странного пока нет.
Однако, когда я делаю некоторые операции над текстом (сохраняя весь текст по-прежнему в одном и том же стилизованном интервале ), часть текста теряет свой стиль даже при проверке DOM показывает, что он должен быть в стиле (красный).
Вот jsfiddle, иллюстрирующий проблему выше:
$('#editable').keypress((event) => {
if (event.key != 'Enter' || !event.shiftKey)
return;
event.preventDefault()
let sel = window.getSelection()
let range = sel.getRangeAt(0)
let newLine = $('<span>')
.addClass('br')
.attr('contenteditable', 'false')[0]
range.startContainer.splitText(range.startOffset) // 1
range.insertNode(newLine) // 2
})
Странно то, что эта проблема возникает при ОЧЕНЬ определенных условиях c.
Например, если я пошагово выполняю код с помощью отладчика или использую setTimeout, чтобы отложить выполнение даже на 1 мс ( см. Jsfiddle # 2 ), тогда все работает как положено.
Или, даже просто избавившись от псевдоэлемента :: before на содержащем div (даже не стилизованном span), это решает проблему ( см. Jsfiddle # 3 ). Это должно быть совершенно не связано!
Есть ли более чистое решение проблемы, которое не предполагает компрометацию css или использование setTimeout?
Редактирование: добавление скриншотов структуры DOM после нажав shift + enter на первом jsfiddle, а на втором. Структура DOM на обоих выглядит одинаково, но на правую модель не накладывается стиль для одного из текстовых узлов: