Сведения о вопросе

Henry

04:34, 28th August, 2020

Теги

Как добавить тег pre внутрь кодового тега с jQuery?

Просмотров: 1106   Ответов: 5

Я пытаюсь использовать jQuery для форматирования блоков кода, а именно для добавления тега <pre> внутри тега <code> :

$(document).ready(function() {
   $("code").wrapInner("<pre></pre>");
});

Firefox применяет форматирование правильно, но IE помещает весь блок кода в одну строку. Если я добавлю предупреждение

alert($("code").html());

Я вижу, что IE вставил некоторый дополнительный текст в тег pre:

<PRE jQuery1218834632572="null">

Если я перезагружаю страницу, число после jQuery изменяется.

Если я использую wrap() вместо wrapInner(), чтобы обернуть <pre> за пределами тега <code> , то и IE, и Firefox обрабатывают его правильно. Но разве <pre> не должен работать и внутри <code> ?

Я бы предпочел использовать wrapInner() , потому что затем я могу добавить класс CSS к тегу <pre> для обработки всех форматирований, но если я использую wrap() , мне придется поместить форматирование страницы CSS в тег <pre> и форматирование текста/шрифта в тег <code> , или Firefox и IE оба дросселя. Ничего особенного, но я бы хотел, чтобы все было как можно проще.

Кто-нибудь еще сталкивался с этим? Я что-то упустил?



  Сведения об ответе

lool

15:22, 17th August, 2020

Вот в чем разница между блочными и встроенными элементами. pre -это элемент уровня блока . Это не законно помещать его в тег code , который может содержать только встроенное содержимое .

Поскольку браузеры должны поддерживать любой ужасный суп из тегов, который они могут найти в реальной сети, Firefox пытается сделать то, что вы имеете в виду. IE случается обращаться с ним по-разному, что прекрасно для спецификации; поведение в этом случае не определено, потому что оно никогда не должно происходить.

  • Не могли бы вы вместо этого заменить элемент code на pre ? (Из-за проблемы block/inline технически это должно работать только в том случае, если элементы находятся внутри элемента с содержимым "flow" , но браузеры все равно могут делать то, что вы хотите.)
  • Почему это code элемент в первую очередь, если вы хотите pre 's поведение?
  • Вы также можете дать code элементу pre ' s whitespace сохранение мощности с CSS white-space: pre , но, по-видимому, IE 6 только чтит это в строгом режиме .


  Сведения об ответе

lesha

23:15, 29th August, 2020

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


  Сведения об ответе

#hash

23:19, 28th August, 2020

Вы используете последнюю версию jQuery ? А что если ты попробуешь

$("code").wrapInner(document.createElement("pre"));

Это лучше или вы получаете тот же результат ?


  Сведения об ответе

+-*/

18:46, 14th August, 2020

Как заявил маркпаск, элемент PRE внутри элемента CODE не допускается в элементе HTML. Самое лучшее решение-это изменить код HTML на использование <pre><code> (что означает предварительно отформатированный блок, содержащий код) непосредственно в вашем HTML для блоков кода.


  Сведения об ответе

#hash

10:15, 8th August, 2020

Вы можете использовать html(), чтобы обернуть его:

$('code').each(function(i,e)
{
    var self = $(e);
    self.html('<pre>' + self.html() + '</pre>');
});

Как уже упоминалось выше, вам было бы лучше изменить свой html. Но это решение должно сработать.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться