jQuery clone li及其子代

时间:2012-11-10 03:49:07

标签: jquery

我正在尝试克隆一个li及其子级,然后将其附加到另一个div。我的问题是,我似乎只能在li标记中获取锚标记,而不是实际的li结构。我正在使用contains找到要克隆的正确li。我知道首先使用的是错误的功能,但我需要做的是让之前的li及其子项找到currentCategory。我创建了JSfiddle以更清楚地显示http://jsfiddle.net/2EE2J/

$(document).ready(function () {
    var currentCategory = $(".Breadcrumb ul li:last").text();
    $(".SideCategoryListFlyout li a:contains('" + currentCategory + "')").first().clone().appendTo("#test");
});

我得到了这个:

<a href="link">link</a>
<a href="link">link</a>
<a href="link">link</a>

我想要这个:

<ul>
    <li class=""><a class="sf-with-ul" href="">Belts<span class="sf-sub-indicator"> »</span></a><ul style="visibility: hidden; display: none;">
    <li><a href="">Casual Belts</a></li>
    <li><a href="">Jean Belts</a></li>
</ul>

1 个答案:

答案 0 :(得分:1)

好的,我们这里(在这里分叉小提琴:http://jsfiddle.net/mori57/QBmUZ/

主要的问题是你真的选择了碰巧是li的子项的标签......所以选择器将返回一个标签数组,而不是它们的父标签。

所以,我们需要一个li标签选择器......让我们从那里开始:

var arrLI = $(".SideCategoryListFlyout li");

我们知道会为你提供一系列LI标签......但我们如何过滤它以便它只包含具有你想要的标签的li?介绍.has()方法! (API文档:http://api.jquery.com/has/

var arrLI = $(".SideCategoryListFlyout li").has("a:contains('" + currentCategory + "')");

在这里,我们只是拿你的li数组,并检查它们是否有你想要的内容。

顺便说一句,我知道人们喜欢链接,因为它很酷,而且具有“哇哇哇哇哇”的因素。但是,您必须记住,每次将选择器放入链中时,都会强制jQuery重新分析DOM树以查找新的选择器。你正在缩小范围,但不是很多,并且强制进行大量的重新分析。此外,所有这些链接使调试成为一个真正的熊,并使你更难理解你的代码。现在,其他比我更聪明的人可以告诉你性能差异是什么,但我真诚地建议你只链接绝对必要的地方,尽可能经常地缓存对象,并将你的代码分解成容易阅读和易读的块。