使用jQuery更改HTML标记结构

时间:2014-01-08 15:22:31

标签: jquery

我有这样的结构:

<div class="row tabs specialtabfontsize"> 
    <nav class="tabsnav">
      <a class="stdhead" href=""> tab1 </a>
      <a class="stdhead" href=""> tab2 </a>
      <a class="stdhead" href=""> tab3 </a>
    </nav>

    <article class="columns">content1...</article>
    <article class="columns">content2...</article>
    <article class="columns">content3...</article> 
</div>

我想用jQuery将其改为:

<div class="row tabs specialtabfontsize">    
    <nav class="tabsnav"><a class="stdhead" href=""> tab1 </a></nav>
    <article class="columns">content1...</article>

    <nav class="tabsnav"><a class="stdhead" href=""> tab2 </a></nav>
    <article class="columns">content2...</article>

    <nav class="tabsnav"><a class="stdhead" href=""> tab3 </a></nav>
    <article class="columns">content3...</article>

</div>

这适用于移动视图。在桌面版中,它看起来像标签。但我想在手机版中像手风琴一样展示它们。我不能改变标记;所以我只能使用脚本。

2 个答案:

答案 0 :(得分:1)

working solution。

var myNavs = new Array();
var myContents = new Array();
var i=0;

$(".stdhead").each( function () {
    myNavs[i++]=$(this).clone().wrap('<p>').parent().html();
});

i=0;

$(".columns").each( function () {
    myContents[i++]=$(this).clone().wrap('<p>').parent().html();    
});

$(".specialtabfontsize").empty();
for(j=0;j<i;j++) {
    $(".specialtabfontsize").append('<nav class="tabsnav">' + myNavs[j] + '</nav>' + myContents[j]);
}

答案 1 :(得分:0)

正如已经指出的那样,这不是最好的方法,但如果你必须这样做,你可以这样做:

var newHTML = "",
    $row = $('.row'),
    $links = $row.find("a"),
    $articles = $row.find("article");

$links.each(function(i, el){
  newHTML += "<nav class='tabsnav'>" + el.get(0) + "</nav>" + $articles[i].get(0);
});

$(".row").html(newHTML);

如果必须根据窗口大小进行还原,例如,它将非常简单。