Поэтому на моем сайте есть редактор 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
, хотя я просто не уверен, как подойти к этому.
Созданная функция будет запущена, когда документ будет готов и все это преобразит. Я не идеал, но эй, это будет.
Я не прошу кого-нибудь написать мне огромный кусок кода, я в основном прошу дать рекомендации о том, как подойти к этому.
В качестве идеального решения я бы рекомендовал установить основную причину, то есть редактор.
Если это невозможно, попробуйте
var $items = $('fieldset fieldset').wrap('<dl />').contents().unwrap().parent();
$items.find('legend').wrap('<dt />').contents().unwrap();
$items.each(function () {
$(this).find('p').wrapAll('<dd />');
})
Решение для специально описанной проблемы
var fieldset = $('fieldset fieldset');
fieldset.wrapAll('<dl>').find('legend').wrapInner('<dt>').children().unwrap()
fieldset.each(function(){
$(this).find('p').wrapAll('<dd>');
}).children().unwrap();
<p>Some long text here...</p> <p>Some long text here...</p>
но желаемый результат у вас есть<dd><p>Some text here<p></dd>