Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery在children()和find()之间找到一个解决方案:任何看起来像最近()的东西? 根据收到的不同答案,使用jQuery而不实现我们自己的选择器函数的唯一解决方案是使用基本选择器,jQuery使用“:first”或“.eq(0)”。_Javascript_Jquery_Children_Closest_Inverse - Fatal编程技术网

Javascript jQuery在children()和find()之间找到一个解决方案:任何看起来像最近()的东西? 根据收到的不同答案,使用jQuery而不实现我们自己的选择器函数的唯一解决方案是使用基本选择器,jQuery使用“:first”或“.eq(0)”。

Javascript jQuery在children()和find()之间找到一个解决方案:任何看起来像最近()的东西? 根据收到的不同答案,使用jQuery而不实现我们自己的选择器函数的唯一解决方案是使用基本选择器,jQuery使用“:first”或“.eq(0)”。,javascript,jquery,children,closest,inverse,Javascript,Jquery,Children,Closest,Inverse,我想知道它们是否是任何类型的最大深度选项或类似于“仅获取第一个结果然后返回它”的函数,但它似乎在jQuery中不可用,因为偶数:选择器中的第一个似乎比调用.eq(0)更快 谢谢你的评论 原职: 我想知道对于children元素是否可以使用类似于“closest”的函数 假设我有这样一个html结构: div.container>[*一些元素,我不能使用children()]>div.sub1>div.sub2>div.sub1>[其他各种子元素] 如果我想要第一个div.sub1,我会这样做:

我想知道它们是否是任何类型的最大深度选项或类似于“仅获取第一个结果然后返回它”的函数,但它似乎在jQuery中不可用,因为偶数:选择器中的第一个似乎比调用.eq(0)更快 谢谢你的评论


原职: 我想知道对于children元素是否可以使用类似于“closest”的函数

假设我有这样一个html结构:

div.container>[*一些元素,我不能使用children()]>div.sub1>div.sub2>div.sub1>[其他各种子元素]

如果我想要第一个div.sub1,我会这样做:

$("div.container").find("div.sub1").eq(0)
问题是我们无法指定“最大深度”,因此将在所有子项中搜索它。我认为这是一个性能问题

我说的是“最大深度”,因为我可以列出可能的选择器案例,但这将是一个很长的列表,大约6-10个项目取决于案例

有人能解决这个问题吗


谢谢

您可以通过将子选择器(
)和通配符(
*
)以不同的数量组合在一起来实现这一点:

// max-depth: grand-children
$('.container').find('> .sub1, > * > .sub1').first();

// max-depth: great-grand-children
$('.container').find('> .sub1, > * > .sub1, > * > * > .sub1').first();
而且,由于硬编码可能相当繁琐,因此可以使用自定义方法为您构建选择器:

jQuery.fn.findAtDepth = function (selector, maxDepth) {
    var depths = [], i;

    if (maxDepth > 0) {
        for (i = 1; i <= maxDepth; i++) {
            depths.push('> ' + new Array(i).join('* > ') + selector);
        }

        selector = depths.join(', ');
    }

    return this.find(selector);
};

$('.container').findAtDepth('.sub1', 3).first();

这将搜索最大深度为3的
.sub1
,但搜索任何深度的
.sub2

为什么不能使用
children()
?@Matt
。children()
只检查1级深度(例如
.container>.child')
。三天前,有人问了同样的问题:。重复?@RobW:不是重复,因为OP希望能够限制深度。如果您希望获得最高性能,那么您需要编写自己的选择器函数(不使用jQuery),该函数遍历层次结构,并在找到第一个匹配项时停止。如果您正在寻找jQuery的最佳实践,只需使用
:first
.eq(0)
,然后继续编写下一段代码即可。你的问题不清楚你真正想要什么,因此我们无法在不了解真正目标的情况下进一步提供帮助。
$('.container').findAtDepth('.sub1, .sub2', 3).first();