0

ネストされたリストの深い階層を平坦化するために、次のメソッドを作成しました (TypeScript を使用していますが、JS のアイデアは理解できます)。

メソッドは各最上位<li>要素に対して実行され、そのすべての子孫がその要素<li>の直後に挿入されます。

    // Flatten a nested list branch - acts in reverse to allow for nested lists
    _flattenBranch(element: HTMLElement)
    {
        var el = $(element);
        $(el.find('li').get().reverse()).each(function ()
        {
            el.after(this);
        });
        // FIX: This is not removing empty descendant lists!
        el.find('ul').remove();
    }

<ul></ul>生成された出力を表示すると、一部の の下にまだ空の があることに気付きました<li>。私は何が欠けていますか?

更新(および再現):

この jsfiddle を試してください: http://jsfiddle.net/3gu7L/3/

出力に次のエラーが発生します。

<li>Application Form
    <ul>
    </ul>
</li>

-Arun P Johnyjsfiddleが以下を使用して呼び出された場合 (これは私のコードに似ています)、階層を平坦化しますが、<ul>一部の要素の子を削除できません:

$('#test').children('li').each(function(){
    test(this)
});
4

1 に答える 1

0

これは簡単な解決策ですが、3 つのレベルのリストがある場合のみです。

function test(element){
    var el = $(element);
    $(el.find('li').get().reverse()).each(function () {
        el.after(this);
        $(this).find('ul').remove();
    });
    // FIX: This is not removing empty descendant lists!
    el.find('ul').remove();
}
$('#test').children('li').each(function(){
    test(this)
});

あなたの例では、 Home<ul>の子ですべてを検索しようとしていますが、Application FormはもはやHomeの子ではありません。

于 2013-05-01T19:50:58.657 に答える