Цель:
Используя jQuery, я пытаюсь заменить все вхождения:
<code> ... </code>
с участием:
<pre> ... </pre>
Мое решение:
Я дошел до следующего,
$('code').replaceWith( "<pre>" + $('code').html() + "</pre>" );
Проблема с моим решением:
но проблема в том, что он заменяет все между тегами «code» (вторым, третьим, четвертым и т. д.) содержимым между первыми тегами «code».
например
<code> A </code>
<code> B </code>
<code> C </code>
становится
<pre> A </pre>
<pre> A </pre>
<pre> A </pre>
Я думаю, мне нужно использовать «это» и какую-то функцию, но боюсь, что я все еще учусь и не совсем понимаю, как собрать решение воедино.
javascript
jquery
replace
Джон
источник
источник
Ответы:
Вы можете передать функцию в
.replaceWith
[docs] :Внутри функции
this
относится к обрабатываемому в данный моментcode
элементу.ДЕМО
Обновление: Там нет никакой большой разницы в производительности , но в случае
code
элементы имеют другие HTML детей, добавление детей вместо сериализации их чувствует себя более правильным:источник
.each
делает).Это намного приятнее:
Хотя надо признать, что решение Феликса Клинга примерно в два раза быстрее :
источник
$('code').children()
вернет пустой объект jQuery для приведенного выше примера, потому чтоcode
элементы не имеют узлов дочерних элементов. Хотя это работает, если есть дочерние элементы.children()
работать не будет. Использованиеcontents()
вместо этого работает отлично. jsfiddle.net/7Yne9unwrap
удаляет родителя и добавляет дочерние элементы к дереву,wrap
снова отсоединяет их и добавляет нового родителя.Это правильно, что вы всегда будете получать
code
содержимое первого , потому что$('code').html()
что всегда будет ссылаться на первый элемент, где бы вы его ни использовали.Вместо этого вы можете использовать
.each
для перебора всех элементов и изменения каждого по отдельности:источник
Попробуй это:
http://jsfiddle.net/mTGhV/
источник
Как насчет этого?
источник
Основываясь на ответе Феликса.
Это воспроизведет атрибуты
code
тегов в заменеpre
тегах .Изменить: это заменит даже те
code
теги, которые находятся внутриinnerHTML
другихcode
тегов.источник
Начиная с jQuery 1.4.2:
Затем вы можете выбрать новые элементы:
Источник: http://api.jquery.com/replaceWith/#comment-45493689
jsFiddle: http://jsfiddle.net/k2swf/16/
источник
Если бы вы использовали ванильный JavaScript, вы бы:
Вот jQuery-эквивалент этого процесса:
Вот URL-адрес jsperf:
http://jsperf.com/substituting-one-tag-for-another-with-jquery/7
PS: Все решения, которые используют
.html()
или.innerHTML
являются деструктивными .источник
Еще один короткий и простой способ:
источник
Лучший и чистый способ.
источник
Вы можете использовать функцию jQuery html. Ниже приведен пример замены тега кода на предварительный тег с сохранением всех атрибутов кода.
Это может работать с любым набором тегов элементов html, которые необходимо поменять местами, с сохранением всех атрибутов предыдущего тега.
источник
Сделал
jquery
плагин, поддерживающий также атрибуты.Использование:
источник
Все приведенные здесь ответы предполагают (как показывает пример вопроса), что в теге нет атрибутов. Если принятый ответ дан на это:
если будет заменен на
Что, если вы хотите сохранить и атрибуты - что будет означать замена тега ...? Это решение:
источник
content.html( this.html )