jQuery克隆li及其子代

jQuery克隆li及其子代,jquery,Jquery,我正在尝试克隆一个li及其子项,然后将其附加到另一个div。我的问题是,我似乎只能在li标记中获得锚定标记,而不能获得实际的li结构。我正在使用contains查找要克隆的正确li。我知道首先使用的函数是错误的,但我需要做的是获取上一个li及其子级,在那里可以找到currentCategory。我创建了JSfiddle以更清晰地显示它 我明白了: <a href="link">link</a> <a href="link">link</a> <

我正在尝试克隆一个
li
及其子项,然后将其附加到另一个
div
。我的问题是,我似乎只能在
li
标记中获得锚定标记,而不能获得实际的
li
结构。我正在使用
contains
查找要克隆的正确
li
。我知道首先使用的函数是错误的,但我需要做的是获取上一个
li
及其子级,在那里可以找到
currentCategory
。我创建了JSfiddle以更清晰地显示它

我明白了:

<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>
好的,我们开始(在这里叉一把小提琴:)

主要的问题是你真的选择了一个恰巧是李的孩子的标签。。。因此,选择器将返回一个标记数组,而不是它们的父项

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

var arrLI = $(".SideCategoryListFlyout li");
我们知道这会给你一系列的LI标签。。。但我们如何过滤它,使它只包含李的有你想要的a标签?介绍.has()方法!(此处为API文档:)

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

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

好的,我们开始吧(在这里叉一把小提琴:)

主要的问题是你真的选择了一个恰巧是李的孩子的标签。。。因此,选择器将返回一个标记数组,而不是它们的父项

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

var arrLI = $(".SideCategoryListFlyout li");
我们知道这会给你一系列的LI标签。。。但我们如何过滤它,使它只包含李的有你想要的a标签?介绍.has()方法!(此处为API文档:)

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


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

当选择器看起来像这样时。
$(”。sideCatMenu a:contains(“)下一步('Li-UL),你多次使用它,把它缓存成一个变量,然后使用它。它会清理你的代码很多。顺便说一句,JSFIDLE中有一个“整洁”按钮来清理缩进。您的FIDLE实际上不包含任何带有class
SideCategoryList弹出按钮的元素。更新的Fiddle现在包含正确的代码。“然后将其附加到另一个div”-不要将
  • 元素附加到
    ,将它们附加到
      。当选择器看起来像
      $(“.sideCatMenu a:包含(“+currentCategory+”))时。下一步('li-ul'))并且多次使用它考虑将其缓存为变量并使用该变量。它会清理你的代码很多。顺便说一句,JSFIDLE中有一个“整洁”按钮来清理缩进。您的FIDLE实际上不包含任何带有class
      SideCategoryList弹出按钮的元素。更新的Fiddle现在包含正确的代码。“然后将其附加到另一个div”-不要将
    • 元素附加到
      ,将它们附加到
        。另外,nnnnnn是正确的。。。你应该附加到ul,而不是DIV。。。通过将li嵌入到一个容器中,您可能会在各种浏览器中出现意外行为。而且,NNNN是正确的。。。你应该附加到ul,而不是DIV。。。通过将li嵌入到一个容器中,您可能会在各种浏览器中出现意外行为,而这些容器本不应该属于li。
        
        var arrLI = $(".SideCategoryListFlyout li").has("a:contains('" + currentCategory + "')");