javascript - 检查元素是否具有某个类并属于包含某个值的表单
问题描述
我需要创建一个验证函数,它将检查某个元素的两件事:
- 它有一定的等级
- 它属于在表单操作上包含部分文本匹配的表单
例如,给定以下内容:
<form method="post" action="/page1">
<div>
<ul>
<li><input type="text" id="text1" class="red" /></li>
<li><input type="text" id="text2" class="red" /></li>
<li><button id="button1" class="blue">Enter</button></li>
</ul>
</div>
</form>
<form method="post" action="/page2">
<div>
<ul>
<li><input type="text" id="text3" class="red" /></li>
<li><input type="text" id="text4" class="blue" /></li>
<li><button id="button2" class="blue">Enter</button></li>
</ul>
</div>
</form>
<form method="post" action="/page2andpage3">
<div>
<ul>
<li><input type="text" id="text5" class="red" /></li>
<li><input type="text" id="text6" class="blue" /></li>
<li><button id="button3" class="blue">Enter</button></li>
</ul>
</div>
</form>
我希望能够创建一个函数并获得以下结果:
isElementValid('text1', 'blue', 'page2') // false
isElementValid('button1', 'blue', 'page2') // false
isElementValid('text3', 'blue', 'page2') // false
isElementValid('text4', 'blue', 'page2') // true
isElementValid('button2', 'blue', 'page2') // true
isElementValid('button3', 'blue', 'page2') // true
我假设我将能够使用hasClass和parents来创建以下内容:
function isElementValid(element, color, action) {
var matchingClass = $(element).hasClass(color);
var matchingParent = $(element).parents() //....attr('action').contains(action);
return matchingClass && matchingParent;
}
但我不确定检查父母的行动表格的最佳方式。这是沿着正确的路线还是有更好的方法?
解决方案
要检测元素上的属性是否包含给定值,您可以使用Attribute contains选择器。然后,您可以使用length
生成的 jQuery 对象的属性来确定是否找到任何东西。
您还应该注意,您的逻辑缺少您使用的 id#
上的选择器前缀。element
试试这个:
function isElementValid(element, color, action) {
let $el = $('#' + element);
let matchingClass = $el.hasClass(color);
let matchingParent = $el.closest(`form[action*="${action}"]`).length != 0;
return matchingClass && matchingParent;
}
console.log(isElementValid('text1', 'blue', 'page2')); // false
console.log(isElementValid('button1', 'blue', 'page2')); // false
console.log(isElementValid('text3', 'blue', 'page2')); // false
console.log(isElementValid('text4', 'blue', 'page2')); // true
console.log(isElementValid('button2', 'blue', 'page2')); // true
console.log(isElementValid('button3', 'blue', 'page2')); // true
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form method="post" action="/page1">
<div>
<ul>
<li><input type="text" id="text1" class="red" /></li>
<li><input type="text" id="text2" class="red" /></li>
<li><button id="button1" class="blue">Enter</button></li>
</ul>
</div>
</form>
<form method="post" action="/page2">
<div>
<ul>
<li><input type="text" id="text3" class="red" /></li>
<li><input type="text" id="text4" class="blue" /></li>
<li><button id="button2" class="blue">Enter</button></li>
</ul>
</div>
</form>
<form method="post" action="/page2andpage3">
<div>
<ul>
<li><input type="text" id="text5" class="red" /></li>
<li><input type="text" id="text6" class="blue" /></li>
<li><button id="button3" class="blue">Enter</button></li>
</ul>
</div>
</form>
推荐阅读
- flutter - 通过 VSCode 在 android 模拟器上运行颤振应用程序会导致蓝屏(VIDEO_TDR_FAILURE)
- python-3.x - 带有列表和输出处理列表的 Python Lambda 函数调用
- python - 在 JWT 标头中添加额外的数据,简单的 jwt
- javascript - jQuery post 返回空响应
- gpu - AMD Polaris 上某些尺寸的矩阵乘法性能下降
- angular - 如何实现 Auth Guard:Angular
- android - 如何获取 FCM 注册令牌
- nuxt.js - 如何在现有 Nuxt.js 项目上安装 Prismic.io 工具
- reactjs - Antd 表单无法识别输入值
- kotlin - 真正的方式是使用函数来创建实例并使用它吗?