0
<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");

我试图在没有第一个li的情况下将.sub-menu副本移动到#sub-menu。一切正常只需要排除第一个li


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

4

3 回答 3

4

我建议:

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

JS 小提琴演示

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

选择器li + li查找li与另一个元素相邻的所有li元素;其中排除了:first-child定义。

当然,您可以使用替代的兄弟选择器,即“通用兄弟”选择器(~字符):

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

JS 小提琴演示

在速度方面,通用兄弟方法似乎是最快的(在 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 小提琴演示

参考:

于 2013-07-20T01:19:24.560 回答
0
$('.sub-menu > li').filter(function(i, el){
    return i > 0;
}).appendTo('#sub-menu');
于 2013-07-20T01:18:22.890 回答
0

应该这样做

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

抱歉有一个小提琴,但不小心更新了。

于 2013-07-20T01:21:27.670 回答