1

li1つとその子のクローンを作成してから、別の子に追加しようとしています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タグの配列が得られることはわかっていますが、必要なタグを持つ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 に答える