对于很多人来说,这似乎是一个非常普遍的问题,但我还没有找到有效的解决方案。
我有一个从调用者接收DOM元素的方法。这个DOM元素恰好是一个div,我想得到一个包含div后代的所有按钮的数组,以便我可以检查它们。
我的第一站是尝试var buttons = jQuery(element).find('button');
,但这只会返回它找到的第一个按钮。
但是,如果我执行类似var buttons = jQuery('.someClass').find('button');
的操作,我会得到所有匹配按钮的列表。
不幸的是,使用选择器进行搜索并不是一个选项,因为我只有一个元素可供使用。
我找到的一个解决方案是:jQuery find() returns only the first matched result ?。这个人的问题几乎与我的问题相同,但我无法使解决方案起作用,也无法理解为什么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="answer 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
observable包含至少4个项目,这意味着该按钮及其父div.answer
应该呈现四次。我希望在进行jQuery查找调用时找到4个按钮。
答案 0 :(得分:0)
这确实是一个淘汰赛问题,而不是jQuery问题。 首次初始化/更新时,自定义绑定不一定能访问完整的DOM。
解决方案是推迟对绑定的评估,直到DOM完全加载后为jQuery(()=> {jQuery(element).find('button');});
答案 1 :(得分:-3)
var elems = document.getElementsByTagName(&#34; button&#34;); var arr = jQuery.makeArray(elems);