2014-10-29 53 views
0

我将UL从一个元素克隆到另一个元素,就像这样。结合克隆的UL菜单

$("#mobMenu li a").each(function(index) { 

    var subID = $(this).attr('id') 

     if (typeof(subID) !== "undefined") { 
      subID = "#sub_" + subID + " .subnav-menu" 
      var subMenu = $(subID).clone(); 
      $(this).parent().append(subMenu); 
    } 
}); 

菜单我克隆:

<div id="sub_cat3"> 

<ul id="sub_cat" class="subnav-menu"> 
    <li>..</li> 
</ul> 

<ul class="subnav-menu"> 
    <li>..</li> 
</ul> 

</div> 

到一个新的移动菜单,看起来像这样:

<ul id="mobMenu"> 
    <li><a id="cat3"></a> 
// cloned menu to go here 
</li> 
</ul> 

所以浩,我可以每个克隆UL合并成一个UL?

<ul class="subnav-menu"> 
<li>..</li> 
<li>..</li> 
</ul> 
+2

样本HTML将帮助了很多(也许在一个SO片断或一的jsfiddle?) – 2014-10-29 15:12:05

+0

更清晰的HTML – user1059511 2014-10-29 15:39:58

+0

回答以下更新使用新的HTML(无需更改代码)更新:http://jsfiddle.net/TrueBlueAussie/b10n5mf0/2幸运的是,我猜对了你的结构:) – 2014-10-29 15:41:26

回答

1

认为你想是这样的(不得不图谋的HTML作为合适的示例没有提供):

JSFiddle:http://jsfiddle.net/TrueBlueAussie/b10n5mf0/1/

或与您的新的HTML:http://jsfiddle.net/TrueBlueAussie/b10n5mf0/4/

$("#mobMenu li a").each(function (index) { 
    var subID = $(this).attr('id') 
    console.log(subID); 
    if (subID) { 
     subID = "#sub_" + subID + " .subnav-menu li" 
     var $div = $('<ul>').append($(subID).clone()); 
     $(this).closest('li').append($div); 
    } 
}); 

注:

  • 它为每个匹配组列表LIS的创建单个UL。
  • 只克隆匹配的LI,然后在创建的UL下插入append
  • if (typeof(subID) !== "undefined")可以用if (subID)替换为attr返回一个字符串或未定义的(并且空字符串被视为您的代码未定义)。
+0

很明显,调用一个'UL'变量'$ div'是一个错误(习惯追加divs)。 'var $ ul'会更好:) – 2014-10-29 15:43:21

+0

很好用,谢谢。 – user1059511 2014-10-29 15:50:06

+0

我如何克隆而不是通过html插入? – user1059511 2014-10-29 15:56:38

0

你可以做...

var $subs = $('.subnav-menu'), 
    $lis = $subs.find('> li').clone(); 

// Add all the $lis to the first subnav... 
$subs.eq(0).append($lis); 

// Remove the rest of the subs... 
$subs.slice(1).remove(); 

这里是一个小的演示:http://jsbin.com/jerapo/2/edit?js,output

+0

我更新了一下。 – 2014-10-29 15:23:37

+1

现在我只是困惑。 – 2014-10-29 15:24:45