2015-01-01 5 views
0

Мне любопытно, есть ли простой способ сделать этот переход с JavaScript.Обратный порядок узлов DOM с Javascript

<div> 
    <i> 
    <b> 
     TEXT 
    </b> 
    </i> 
</div> 

Для этого:

<div> 
    <b> 
    <i> 
     TEXT 
    </i> 
    </b> 
</div> 

Теперь я знаю, что это возможно в более длительных отношениях, как создание нового <b> и <i>, размещая все старые <b> внутри нового <i>, а затем новый <i> внутри нового <b>, а затем заменить ребенка или аналогичный метод. Но мне любопытно, есть ли что-то вроде node.swapTypeWithParent или swapNodeTypes(b, i).

+1

Однако, я не думаю, что это имеет смысл. Поскольку вложение элементов имеет множество ограничений - просто «обратное» действительное дерево dom может привести к недопустимому. – Leo

+0

Приложите текстовый узел к узлу 'i', добавьте узел' b' в 'div', добавьте' i' в 'b' - это примерно так же коротко, как и он, без создания каких-либо новых узлов. http://jsfiddle.net/p49shh43/ – CBroe

ответ

1

Нет, не существует. Предполагая «более длинными способами» вы подразумеваете перемещение и замену элементов и текста на javascript, тогда это способ сделать это, и в javascript нет других ярлыков.

-1

Вот мое решение на основе jQuery. Я думаю, что это не будет короче этого!

$('div>*>*').contents().unwrap();

$('div>*').wrap('<b></b>');

Я знаю, что ваш пример просто демо для этой функции, но я все еще нахожу это тривиально, что мы обменивать <i> элементы с <b> элементами, так как результат будет таким же семантически и стилистически :)

0

Вы можете сделать это довольно легко с парой петель

function reverseNest(bottom_level, top_level) { 
    var arr = [], 
     e = bottom_level, 
     f; 
    while ((e = e.parentNode) && e !== top_level) { 
     arr.push(e); 
    } 
    arr.push(bottom_level); 
    e = top_level || document.documentElement; 
    while (arr.length) { 
     f = arr.shift(); 
     e.appendChild(f); // may want to use .insertBefore 
     e = f; 
    } 
} 

Здесь bottom_level бы ваш #text узла и top_level будет ваш <div>

Быстрый DEMO (осмотр с консолью, чтобы увидеть перевернутые тег)

 Смежные вопросы

  • Нет связанных вопросов^_^