javascript - jQuery find 和 prev 方法
问题描述
我有一个 HTML 表单,我在其上运行 jQuery“查找”方法来查找一组特定的元素。我想找到的一种元素必须满足这两个标准:
- 类型文本的输入
- 直接跟在它后面的 DOM 元素有一个特定的类(“错误”)
在下面的示例表单中,将找到第一个 div(在日历下拉菜单中选择),第二个(“忽略”)不会找到,第三个会。
<form>
<div class="calendar-dropdown">
<select>
// options
</select>
</div>
<input type="text" value="one">
<div class="ignore">Ignored</div>
<input type="text" value="one">
<div class="error">Show error</div>
</form>
我当前的查找方法如下所示:
form.find('.calendar-dropdown select, :text:visible.next(.error)')
日历下拉菜单可以找到我还需要处理的另一组元素。我知道这个解决方案是错误的,但我不知道如何使它工作。这可以使用 find 方法完成吗?
解决方案
您可以使用.filter
获取所有输入,然后过滤到您想要的输入:
$("input").filter((i, e) => $(e).next(".error").length != 0)
在示例中,第一个 div 不会被找到,但第二个会 [被发现]
$("input")
.filter((i, e) => $(e).next(".error").length != 0)
.addClass("inputError")
.inputError {
color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
<input type="text" value="one">
<div class="ignore">Ignored</div>
<input type="text" value="two">
<div class="error">Show error</div>
</form>
注意:.find
没有要应用的等效回调/选择器函数。
您可以添加自定义选择器,例如:hasnext
,但如果.filter
涵盖您,它过于复杂。
您还可以.add
在过滤后组合多个选择器。
推荐阅读
- drake - PyDrake ComputePointPairPenetration() 杀死内核
- mysql - MySQL 中位数与 2 group by
- python - 如何在 Windows 上从 Python 代码打开“查找”对话框?
- java - Thymeleaf 隐藏标签 wen th:text="#{var}"
- java - Android 上滑动膨胀图像的问题
- mysql - 我对 SQL 中的触发器有一个非常简单的问题
- dart - Flutter/Dart DateTime 解析 UTC 并转换为本地
- python - Python Regex:使用按位或匹配尾随和前导空格
- immutability - 为什么在重新定义变量时使变量不可变并创建新条目?
- react-native - 为什么 ReactNative 中的 Switch 显示切换动画,尽管它的 value 属性没有改变?(iOS)