2013-01-01 136 views
0

我在我的HTML页面中有nested lists,这些列表由一个jQuery代码管理,这个代码为用户提供了向列表节点添加行和子元素的交互。每个列表可以包含一个div用于添加一个新的列表作为孩子。 我的问题是我想补充一个动态限制器深的元素,我可以创造:通过jQuery深度去除HTML元素

<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的限制吧,怎么可能是我的做法呢?

+0

jQuery的代码添加嵌套UL必须检查的深度,且仅当限制尚未达到继续。那是jQuery编码你自己的代码,还是你使用第三方插件? –

+0

这只是一个页面的代码,所以我决定不为此开发插件。 – vitto

回答

2

你的意思是像这样?

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

jsfiddle example

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(); 
+0

对于插件+1,对其他人可能会有用;) – vitto