1

我正在尝试克隆一个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>
4

1 回答 1

1

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

主要问题是您实际上是在选择一个恰好是 li 的子级的标签......所以选择器将返回一个标签数组,而不是它们的父级。

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

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

我们知道这会给你一个 LI 标签数组......但是我们如何过滤它,使其只包含具有你想要的 a 标签的 li?介绍 .has() 方法!(此处的 API 文档:http: //api.jquery.com/has/

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

在这里,我们只是获取您的 li 数组,并检查它们是否具有您想要的内容。

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

于 2012-11-10T05:09:16.913 回答