不是第一个孩子 - jQuery

时间:2013-07-20 01:12:08

标签: jquery

<ul class="sub-menu">
    <li id="menu-item-88" class="menu-item menu-item-type-custom menu-item-object-custom">
    <li id="menu-item-43" class="menu-item menu-item-type-custom menu-item-object-custom">
    <li id="menu-item-44" class="menu-item menu-item-type-custom menu-item-object-custom">
    <li id="menu-item-48" class="menu-item menu-item-type-custom menu-item-object-custom">
    <li id="menu-item-49" class="menu-item menu-item-type-custom menu-item-object-custom">
</ul>

spec.find($(".sub-menu:not(:first-child)")).clone().prependTo("#sub-menu");

我试图移动 .sub-menu 重复,而不是先将 li 复制到#子菜单。一切正常,只需排除第一个 li


感谢every1!所有答案都很好,但一个非常详细的+1知识:)

3 个答案:

答案 0 :(得分:4)

我建议:

$('.sub-menu').clone().find('li + li').appendTo('#sub-menu');

JS Fiddle demo

以上是一个简单的演示,不会删除原始文件,并假设您将li元素移动到的元素是一个列表(ulol)。

选择器li + li找到所有li个元素,它们是另一个li元素的相邻兄弟元素;根据定义排除:first-child

当然,你可以使用替代兄弟选择器,'general-sibling'选择器(~字符):

$('.sub-menu').clone().find('li:first-child ~ li').appendTo('#sub-menu');

JS Fiddle demo

就速度而言,一般兄弟方法似乎最快(在Chromium 27 / Ubuntu 12.10中),JS Perf demo

更新以前的JS Perf测试后,事实上似乎使用filter()更快:

$('.sub-menu').clone().find('li').filter(function(i) {
  return i > 0;
}).appendTo('#sub-menu');

JS Fiddle demo

参考文献:

答案 1 :(得分:0)

$('.sub-menu > li').filter(function(i, el){
    return i > 0;
}).appendTo('#sub-menu');

答案 2 :(得分:0)

应该这样做

spec.find('ul.sub-menu > li:gt(0)').clone().prependTo("#sub-menu");

抱歉有一个小提琴,但意外更新。