通过jQuery深入删除HTML元素

时间:2013-01-01 18:00:37

标签: javascript jquery limit deep-linking

我的HTML页面中有nested lists,这些列表由jQuery代码管理,该代码为用户提供了向列表节点添加行和子项的交互。每个列表都可以包含div,用于将新列表添加为子列表。 我的问题是我想在我可以创建的元素的深处添加一个动态限制器:

<ul>
    <li>
        <ul>
            <li><div class="add-child"></div></li>
            <li><div class="add-child"></div></li>
            <li><div class="add-row"></div></li>
        </ul>
    </li>
    <li><div class="add-child"></div></li>
    <li><div class="add-child"></div></li>
    <li><div class="add-row"></div></li>
</ul>

将来可能会发生变化,我知道如果我想使用a max of 3 levels of deepness,我可以简单地使用这样的静态选择器:

$('li li li .add-child').remove();

但是我想要一个动态解决方案来通过PHP设置深度,然后通过jQuery限制它,我的方法怎么可能呢?

2 个答案:

答案 0 :(得分:3)

$('.add-child')
    .filter(function(){
        return $(this).parents('li').length > 2;
    })
    .remove();

我知道,你说你不需要插件,但我无法抗拒:D

$.fn.filterIfHasNParents = function(n, selector){
    var depth = n || 1;
    return $(this).filter(function(){
        return $(this).parents(selector || '').length > depth - 1;
    });
}

然后将其用作:

$('.add-child').filterIfHasNParents(3, 'li').remove();

答案 1 :(得分:2)

你的意思是这样的吗?

$( '.add-child' ).each( function() {
    if( $( this ).parents( 'li' ).length > someDepthSetByPHP )
    {
        $( this ).remove();
    }
} );

jsfiddle example