如何在cheerio或jquery中为多个元素的预定义父级换行?

时间:2017-12-04 18:03:51

标签: javascript jquery cheerio

我有一个类似的xml:

d

显然有更多的段落等。

使用cheerio(jquery的语法也适用)我想包装paragraph元素,直到只有<document> <paragraph> <d>text1</d> </paragraph> <paragraph> <d>text2</d> </paragraph> </document> 作为父元素。

.unwrap()

我想过在元素上使用d命令3次。但我无法保证在paragraph和{{1}}之间的某些xml中我可能会有更少或更多的父母。

2 个答案:

答案 0 :(得分:2)

不确定这是否适用于您的环境,但是,我认为您可以使用这个想法:

$('d').each(function() {
cloned=$(this).clone();

$(this).closest('paragraph').append(cloned);
$(this).parentsUntil($('paragraph')).remove();

});

因此,克隆元素,将其放在段落中,删除所有parentsUntil()段......

演示:

$('d').each(function() {
cloned=$(this).clone();

$(this).closest('paragraph').append(cloned);
$(this).parentsUntil($('paragraph')).remove();

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<document>
   <paragraph>
      <a>
         <b>
            <c>
               <d>text1</d>
            </c>
         </b>
      </a>
   </paragraph>
   <paragraph>
      <a>
         <b>
            <c>
               <d>text2</d>
            </c>
         </b>
      </a>
   </paragraph>
</document>

答案 1 :(得分:1)

这是我的解决方案DEMO。我用循环来克隆<d>元素,然后将其重写为段落元素。

JS

$(document).ready(function(){
  var i = $('d').length;
  for(x=i--;x>=0;x--){
    var c = $('d').eq(x).clone();
    $('d').eq(x).parents('paragraph').html(c);
  }
});