Contenteditable добавляет, когда я ударяю место

Я не уверен, почему, но если у вас есть элемент с включенным contenteditable, при первом вводе пробела он добавит тег <br> в элемент. Если элемент по умолчанию имеет пробел (<p contenteditable="true">this is a test</p>), все будет хорошо, но как только пользователь ударит эту пробел (или даже скопирует + вставляет пробел), Firefox добавляет <br _moz_dirty="" /> к <p>.

Кто-нибудь знает, почему или просто исправить? Это мой первый раз, когда я играю с довольными, так что многие из них для меня новы. На данный момент я просто использую $('br').remove(), который, кажется, работает, но я бы хотел объяснить и надлежащим образом предотвратить его, если кто-нибудь знает.

Ответ 1

Я использую preventDefault когда пользователь делает возврат каретки. Возможно, вы могли бы изменить его так, чтобы он возвращал обычный пробел, когда пользователь использует клавишу пробела.

if(e.keyCode==13 && e.shiftKey){ //enter && shift
    e.preventDefault(); //Prevent default browser behavior
    //this.html(this.html+"<br>");
}
if(e.keyCode==13){ //enter
    e.preventDefault(); //Prevent default browser behavior
}

Ответ 2

Я столкнулся с этим сегодня и также не знаю, почему Firefox делает это. Я имел дело с этим, как это.

function zapTrailingLinebreak (editableNode) {
    let children = Array.from(editableNode.childNodes)

    children.forEach(child => {
        if (children.indexOf(child) == children.length - 1) {
            if (child.tagName && child.tagName === "BR") {
                editableNode.removeChild(child)
            }
        } 
    })
}