这看起来像是可以“内置”到jQuery中的很好的东西,但我认为它仍然值得一问。
我有一个问题,这个问题可以通过迭代一个元素的所有子元素来轻松解决。我最近发现,我需要考虑比"1级“更深一到两级的情况(只需调用.children()一次)。
jQuery.each(divToLookAt.children(), function(index, element)
{
//do stuff
}
); 这就是我目前正在做的事情。为了深入到第二层,我在为每个元素编写代码后运行另一个循环。
jQuery.each(divToLookAt.children(), function(index, element)
{
//do stuff
jQuery.each(jQuery(element).children(), function(indexLevelTwo, elementLevelTwo)
{
//do stuff
}
);
}
);如果我想再深入一层,我必须重新做一遍。
这显然不是一件好事。我喜欢声明一个"level“变量,然后让它来处理所有的事情。有没有人对干净高效的jQueryish解决方案有什么想法?
谢谢!
发布于 2011-01-18 06:51:14
这是一个很棒的问题,因为深度捕获的级别很高。Check out the fiddle。
已将其转换为插件。
激活
$('#div').goDeep(3, function(deep){ // $.fn.goDeep(levels, callback)
// do stuff on `this`
});插件
$.fn.goDeep = function(levels, func){
var iterateChildren = function(current, levelsDeep){
func.call(current, levelsDeep);
if(levelsDeep > 0)
$.each(current.children(), function(index, element){
iterateChildren($(element), levelsDeep-1);
});
};
return this.each(function(){
iterateChildren($(this), levels);
});
};发布于 2011-01-18 06:44:43
这个问题太棒了:-)
如果你知道你的DOM不是太大,你可以找到所有的后代并过滤掉不符合条件的:
var $parent = $('#parent');
var $childrenWithinRange = $parent.find('*').filter(function() {
return $(this).parents('#parent').length < yourMaxDepth;
});在此之后,jQuery实例"$childrenWithinRange“将是该父<div>的所有位于某个最大深度内的子节点。如果你想要这个深度,你可以把"<“改成"===”。我可能在某处少了一个人。
发布于 2011-01-18 08:17:45
这个问题的答案听起来可能是XPATH。我不太了解浏览器支持,但在XPATH中,您只需创建如下路径
/*/*/*/*https://stackoverflow.com/questions/4718559
复制相似问题