Как добавить предварительный тег внутри тега кода с помощью jQuery?
Я пытаюсь использовать 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 оба задыхаются. Ничего особенного, но я бы хотел, чтобы это было как можно проще.
кто-нибудь еще сталкивался с этим? Я что-то упускаю?
Ответов (5)5
В этом разница между блочными и встроенными элементами. pre
является элементом блочного уровня . Нельзя помещать его в code
тег, который может содержать только встроенный контент .
Поскольку браузеры должны поддерживать любой ужасный суп из тегов, который они могут найти в реальной сети, Firefox пытается делать то, что вы имеете в виду. IE обрабатывает это по-другому, и это нормально по спецификации; поведение в этом случае не определено, потому что этого никогда не должно происходить.
- Не могли бы вы вместо того, чтобы заменить на
code
элемент сpre
? (Из-за проблемы с блокировкой / встроением технически это должно работать только в том случае, если элементы находятся внутри элемента с «потоковым» содержимым , но браузеры в любом случае могут делать то, что вы хотите.) - Почему это вообще
code
элемент, если вы хотитеpre
его поведения? - Вы также можете дать
code
элементу возможностьpre
сохранять пробелы с помощью CSSwhite-space: pre
, но, очевидно, IE 6 учитывает это только в строгом режиме .