Подтвердить что ты не робот

Тестовый тег абзаца

Мне было интересно, есть ли приемлемый способ заставить все основные браузеры вставлять тег абзаца вместо тега по умолчанию, который они вставляют при нажатии клавиши ввода, когда contentEditable истинно.

Насколько я знаю, IE автоматически вставляет p. Но Google Chrome вставляет теги div и Firefox вставляет br (WTF?!).

Спасибо заранее!

4b9b3361

Ответ 1

вы можете использовать document.execCommand('formatBlock', false, 'p'); в случае, например, keypress или keydown и т.д., чтобы использовать абзацы после ввода нажмите. Например:

element.addEventListener('keypress', function(ev){
    if(ev.keyCode == '13')
        document.execCommand('formatBlock', false, 'p');
}, false);

Ответ 2

По мере его создания в браузере вы не можете изменить это поведение. Вы могли бы обойтись, обнаружив браузер и заменив элементы соответственно. Очень уродливо, я знаю.

Также проверьте WhatWG для фона: http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-May/031577.html

Ответ 3

У меня была эта же проблема и я нашел решение (CHROME, MSIE, FIREFOX), следуйте моему коду в ссылке.

$(document).on('click','#myButton',function() {
    if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1)
        var str = $('#myDiv').html().replace(/<br>/gi,'').replace(/<div>/gi,'<br>').replace(/<\/div>/gi,'');
    else if (navigator.userAgent.toLowerCase().indexOf("firefox") > -1)
        var str = $('#myDiv').html().replace(/<\/br>/gi,'').replace(/<br>/gi,'<br>').replace(/<\/br>/gi,'');
    else if (navigator.userAgent.toLowerCase().indexOf("msie") == -1)
        var str = $('#myDiv').html().replace(/<br>/gi,'').replace(/<p>/gi,'<br>').replace(/<\/p>/gi,'');    
    $('#myDiv2').removeClass('invisible').addClass('visible').text(str);
    $('#myDiv3').removeClass('invisible').addClass('visible').html(str);
});

https://jsfiddle.net/kzkxo70L/1/