1

なぜ私がこれを取得しているのか、誰でも説明できますか。私がやろうとしているのは、内のリンクの一致に基づいて、<ul>リスト ツリーの一部を別のツリーに複製することです。<div><a><li>

<ul>ツリーの正しい部分を見つけるという点で、それは一種の機能です。しかし、それを複製する代わりに、元のツリーから完全に抽出しているようです。

これはコードですが、以下のリンクで動作を確認してください。

$(document).ready(function (e) {
  var test = "/our-services/";
  var subNav = $('#mainNav ul').find('a[href$="' + test + '"]').parent();
  $('#thing').html(subNav).wrapInner('<ul/>');
});

jsフィドル

何を与える?

4

2 に答える 2

4

clone()メソッドを使用して、最初に見つかったノード/要素を移動しないようにする必要があります。

$(document).ready(function (e) {
    var test = "/our-services/"
        subNav = $('#mainNav ul').find('a[href$="' + test + '"]').parent().clone(true);

    $('#thing').html(subNav).wrapInner('<ul/>');
});

JS フィドルのデモ

または、少し書き直します:

$(document).ready(function (e) {
    var test = "/our-services/",
        subNav = $('#mainNav ul').find('a[href$="' + test + '"]').parent().clone(true);

    subNav.appendTo('#thing').wrap('<ul />');
});

JS フィドルのデモ

参考文献:

于 2013-05-10T11:24:57.780 に答える
1

面白い行動!これはおそらく、jQuery がメソッドに astringが渡されることを期待しているため、フードの下で奇妙なことを行っているために発生して.html()いますが、jQuery オブジェクトにラップされた dom ノード全体を渡しています。Jquery のドキュメントを参照してください

そのノードの html コンテンツを取得して、次の.html()ようにメソッドに渡します。

$(document).ready(function (e) {
  var test = "/our-services/";
  var subNav = $('#mainNav ul').find('a[href$="' + test + '"]').parent();
  $('#thing').html(subNav.html()).wrapInner('<ul/>');
});

編集

これにより、元のノードにアタッチされているデータまたはイベント ハンドラーが削除されることに注意してください。これは、実装によって必要な動作である場合とそうでない場合があります。それらを保持したい場合clone()は、他の回答で説明されている方法を使用しますが、clone(true)代わりにclone(false)デフォルトのどちらを使用してください。

以下も参照してください。

要素またはオブジェクトを jQuery .html() メソッドに渡す .html() メソッドが文字列だけでなく jQuery オブジェクトを受け入れる理由の説明。

于 2013-05-10T11:27:14.133 に答える