Javascript 如何按属性展开html

Javascript 如何按属性展开html,javascript,html,Javascript,Html,如何按属性展开html: <div dir="rtl"><div><div dir="rtl"><h2>test</h2></div></div></div> 你是说这个 unwrap是一个jQuery语句 $(“[dir=rtl]”)。每个(函数(){$(this.children().unwrap()}) 测试 定义此unwrap()函数: funct

如何按属性展开html:

<div dir="rtl"><div><div dir="rtl"><h2>test</h2></div></div></div>
你是说这个

unwrap是一个jQuery语句

$(“[dir=rtl]”)。每个(函数(){$(this.children().unwrap()})

测试
定义此
unwrap()
函数:

function unwrap(el, selector) {
  var descendantsArr = Array.from(el.querySelectorAll(selector));

  if (el.matches(selector))
    removeSelf(el);

  descendantsArr.forEach(d => unwrap(d, selector));

  function removeSelf(el) {
    var childNodesArr = Array.from(el.childNodes),
        parent = el.parentElement;

    el.remove();

    childNodesArr.forEach(n => {
        parent.appendChild(n);
    })
  }
}
然后使用它:

unwrap(yourRootElement, '[dir="rtl"]');
yourRootElement
可能是
document.body
(如果要扫描整个正文),也可能是要从中开始扫描的某个根元素

function unwrap(el, selector) {
  var descendantsArr = Array.from(el.querySelectorAll(selector));

  if (el.matches(selector))
    removeSelf(el);

  descendantsArr.forEach(d => unwrap(d, selector));

  function removeSelf(el) {
    var childNodesArr = Array.from(el.childNodes),
        parent = el.parentElement;

    el.remove();

    childNodesArr.forEach(n => {
        parent.appendChild(n);
    })
  }
}
unwrap(yourRootElement, '[dir="rtl"]');