Как изменить типы тегов с помощью jQuery

0

Поэтому на моем сайте есть редактор HTML (редактор WYSIWYG), который действительно не отвечает так, как должен быть.

В основном, он загружает все мои разделы в оболочку fieldset, что является фантастическим, но затем он также создает все разделы в виде fieldset. Мне нужно разбить этот раздел и преобразовать его в список описаний, dl.

Вот как это сейчас выглядит:

<fieldset>
    <legend>Our Services</legend>
    <fieldset>
        <legend>Some title here</legend>
        <p>Some long text here...</p>
        <p>Some long text here...</p>
    </fieldset>
    <fieldset>
        <legend>Some title here</legend>
        <p>Some long text here...</p>
        <p>Some long text here...</p>
    </fieldset>
    <fieldset>
        <legend>Some title here</legend>
        <p>Some long text here...</p>
        <p>Some long text here...</p>
    </fieldset>
    <fieldset>
        <legend>Some title here</legend>
        <p>Some long text here...</p>
        <p>Some long text here...</p>
    </fieldset>
</fieldset>

Вот как конвертированная версия должна выглядеть так:

<fieldset>
    <legend>Our Services</legend>
    <dl>
        <dt>Some title here</dt>
        <dd><p>Some long text here...<p></dd>

        <dt>Some title here</dt>
        <dd><p>Some long text here...<p></dd>

        <dt>Some title here</dt>
        <dd><p>Some long text here...<p></dd>

        <dt>Some title here</dt>
        <dd><p>Some long text here...<p></dd>
    </dl>
</fieldset>

Я знаю, что мне нужно использовать такие функции, как replaceWith и wrap, хотя я просто не уверен, как подойти к этому.

Созданная функция будет запущена, когда документ будет готов и все это преобразит. Я не идеал, но эй, это будет.

Я не прошу кого-нибудь написать мне огромный кусок кода, я в основном прошу дать рекомендации о том, как подойти к этому.

  • 5
    какое отношение этот заголовок имеет к этому вопросу?
  • 1
    здесь есть <p>Some long text here...</p> <p>Some long text here...</p> но желаемый результат у вас есть <dd><p>Some text here<p></dd>
Показать ещё 11 комментариев
Теги:

2 ответа

1
Лучший ответ

В качестве идеального решения я бы рекомендовал установить основную причину, то есть редактор.

Если это невозможно, попробуйте

var $items = $('fieldset fieldset').wrap('<dl />').contents().unwrap().parent();
$items.find('legend').wrap('<dt />').contents().unwrap();
$items.each(function () {
    $(this).find('p').wrapAll('<dd />');
})

Демо: скрипка, или скрипка

  • 0
    Работал отлично, спасибо!
1

Решение для специально описанной проблемы

var fieldset = $('fieldset fieldset');

fieldset.wrapAll('<dl>').find('legend').wrapInner('<dt>').children().unwrap()
fieldset.each(function(){
    $(this).find('p').wrapAll('<dd>');
}).children().unwrap();

Демо на странице http://jsfiddle.net/YD5n5/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню