jQuery.find() 只返回第一个结果

jQuery.find() only returns first result

本文关键字:返回 第一个 结果 find jQuery      更新时间:2023-09-26

对于很多人来说,这似乎是一个很常见的问题,但我无法找到有效的解决方案。

我有一个从调用者接收 DOM 元素的方法。这个 DOM 元素恰好是一个div,我想获取作为div 后代的所有按钮的数组,以便我可以检查它们。

我的第一站是尝试var buttons = jQuery(element).find('button');但这只返回它找到的第一个按钮。

但是,如果我执行类似var buttons = jQuery('.someClass').find('button');的操作,我会得到所有匹配按钮的列表。

不幸的是,使用选择器进行搜索不是一种选择,因为我只有一个元素可以使用。

我找到的一个解决方案是:jQuery find(( 只返回第一个匹配的结果?。这个人的问题几乎和我的问题一样,但我无法让解决方案起作用,也不明白为什么jQuery没有做我期望它在这里做的事情。

其他例子在谷歌甚至SO上都存在,但大多数似乎针对选择器的使用,而不是元素。

我对jQuery有什么不了解,它阻止了它以我认为应该的方式工作,我如何才能完成我想要的事情?

附加信息(这实际上可能是一个淘汰赛问题吗?

给你一组具体的HTML来查看有点困难,因为它是通过挖空动态呈现的。也就是说,下面是适用于这种情况的代码片段:

<!-- ko if: Answers.length == 4 -->
<div class="col-xs-12 col-xs-offset-0 col-sm-12 col-sm-offset-0" data-bind="ButtonTextReflowWidth: '120px'">
    <!-- ko foreach: Answers -->
    <div class="answerswer col-xs-12 col-sm-3" data-bind="css: { selectedAnswer: $parent.SelectedScaleValueID() == ScaleValueID }">
        <button tabindex="-1" class="btn" data-bind="click: $parent.SetSelectedScaleValueID, text: Text, enable: ($parent.ParentVM.CurrentQuestion().QuestionID == $parent.QuestionID)" type="button"></button>
    </div>
    <!-- /ko -->
    <!-- ko template: {name: 'editButtonTemplate'} --><!-- /ko -->
</div>
<!-- /ko -->

data-bind="ButtonReflowWidth: '120px'"是将其div 作为元素传递到需要查找div 内所有按钮的函数中的绑定。

现在我用更新鲜的眼光看待它,我想知道这是否真的是一个淘汰问题,而不是 jQuery 问题。可能是在 DOM 知道模板已呈现之前正在初始化自定义绑定吗?

anwsers可观察量至少包含 4 个项目,这意味着按钮及其父div.answer应呈现四次。我希望在进行jQuery查找调用时找到4个按钮。

这确实是一个淘汰问题,而不是jQuery问题。自定义绑定在首次初始化/更新时不一定有权访问完整的 DOM。

解决方案是将绑定的评估推迟到DOM完全加载之后jQuery(()=> {jQuery(element).find('button');});

试试这个。应该工作:

var elems = document.getElementsByTagName( "button" (;var arr = jQuery.makeArray( elems (;