使用Javascript反转DOM节点顺序

时间:2015-01-01 01:39:46

标签: javascript dom language-features

我很好奇是否有一种简单的方法可以使用JavaScript进行转换。

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

对此:

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

现在我知道这可以通过更长的方式实现,例如创建新的<b><i>,将所有旧的<b>放在新的<i>中,然后新<i>内的新<b>,然后替换子或类似方法。但我很好奇是否有类似node.swapTypeWithParentswapNodeTypes(b, i)的内容。

3 个答案:

答案 0 :(得分:1)

不,没有。假设用“更长的方式”来表示用javascript移动和替换元素和文本,那就是这样做的方式,并且javascript中没有其他快捷方式。

答案 1 :(得分:1)

你可以通过几个循环轻松地完成这个任务

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(使用控制台检查以查看反转标签)

答案 2 :(得分:-1)

这是我基于jQuery的解决方案。我认为它不会比这更短!

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

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

我知道您的示例只是此功能的演示,但我仍然觉得我们用<i>元素交换<b>元素是微不足道的,因为结果将在语义和风格上相同:)