使用jQuery查找元素的下一个实例,而不考虑关系
Finding the next instance of an element, regardless of relationship, using jQuery?
我正在为表单处理错误消息,并试图找出如何使用一个函数显示错误。不幸的是,在我的表单中,错误消息元素与字段的关系各不相同
<div class="col-sm-6">
<label for="first_name">First Name</label>
<input type="text" id="first_name" name="first_name" />
<div class="error">Please enter your first name.</div>
</div>
在这种情况下,我可以使用$(this).next.show();
来显示错误消息。
然而,在其他情况下,我的字段的结构是这样的:
<div id="variants">
<div class="col-sm-6 col-lg-4">
<label><input type="radio" name="variant" value="red">Red</label><br/>
<label><input type="radio" name="variant" value="green">Green</label><br/>
<label><input type="radio" name="variant" value="blue">Blue</label>
</div>
<div class="col-sm-6 col-lg-4">
<label><input type="radio" name="variant" value="yellow">Yellow</label><br/>
<label><input type="radio" name="variant" value="brown">Brown</label><br/>
<label><input type="radio" name="variant" value="orange">Orange</label>
</div>
<div class="error">Please select a product variant.</div>
</div>
在本例中,上面的jQuery选择器将不起作用,因为.error
元素是输入的父元素的同级元素,而不是输入的直接同级元素。
我的问题是,有没有任何方法可以选择元素的下一个最接近的实例,而不管它与被比较的元素的关系如何?我正在研究.closest()
,但一直没能使它发挥作用。
谢谢!
您需要在层次结构的每个级别上有效地上下搜索。
$(this).parents().has('.error').first().find('.error');
这将依次检查每个父级,查看何时有错误类,返回最接近的,然后找到子级错误。
你也可以使用这样的东西:
$(this).closest(':has(.error)').find('.error');
以下是一个JSFiddle,显示两者都在工作(以停止所有的抱怨):http://jsfiddle.net/u37twowx/1/:)
您将注意到,此解决方案不需要在层次结构中添加类
为每个输入元素容器div使用一个公共类,并使用closest()
和find()
针对错误div。
例如:
<div class="col-sm-6 element">
<label for="first_name">First Name</label>
<input type="text" id="first_name" name="first_name" />
<div class="error">Please enter your first name.</div>
</div>
<div id="variants" class="element">
<div class="col-sm-6 col-lg-4">
<label><input type="radio" name="variant" value="red">Red</label><br/>
<label><input type="radio" name="variant" value="green">Green</label><br/>
<label><input type="radio" name="variant" value="blue">Blue</label>
</div>
<div class="col-sm-6 col-lg-4">
<label><input type="radio" name="variant" value="yellow">Yellow</label><br/>
<label><input type="radio" name="variant" value="brown">Brown</label><br/>
<label><input type="radio" name="variant" value="orange">Orange</label>
</div>
<div class="error">Please select a product variant.</div>
</div>
现在使用jquery:
$(this).closest(".element").find(".error").show();
我一直在使用:after
伪类,然后将该类添加到接收错误的元素中。
有多种方法可以做到这一点,尤其是如果您想要自定义消息。
HTML
<input type="text" id="first_name" name="first_name" />
CSS
input.error:after, input.error::after {
content: '';
position: relative;
bottom: 0;
height: 20px;
background: red;
color: white;
}
#first_name.error:after, #first_name.error:after {
content: 'Please input first name.';
}
#last_name.error:after, #last_name.error:after {
content: 'Please input last name.';
}
.
.
.
jQuery
$('input').keypress(function(){
if(/*Conditional*/){
$(this).addClass('error');
}
});
这是一个简单的jQuery函数,您只需要设置它来相应地处理错误。
相关文章:
- 使用Dnamics CRM 2011中的JavaScript读取子网格的所有记录,而不考虑活动页面
- 气质的“nestRemoting()”有时可以'找不到关系
- 在BoilerplateJS浏览器加载所有脚本(在其他模块中),而不考虑激活的模块
- JS toLocaleString始终显示货币符号,而不考虑区域设置
- 不使用关系运算符的JavaScript条件表达式
- 在呈现网页时复制网页,而不考虑参考底图的来源
- 如何使用 javascript 获取 UTC 格式的日期,而不考虑当前系统日期
- 转换 JSON 日期,不考虑时区
- 使用XPath选择包含文本的节点,而不考虑CasperJS中的空白
- 使用简单的角度滤波器来替换输入字符串中某些字符串的所有出现,而不考虑大小写和空格
- 角度高图表和ng网格标题不考虑帧宽度
- jQuery/JavaScript代码如何将表导出为CSV文件而不考虑表's大小.看看@jsfiddle链接
- 捕获给定类型的所有事件,而不考虑气泡/目标
- 选项卡分组和选项卡着色:如何将此功能应用于从我的网页打开的选项卡,而不考虑浏览器
- CSS不透明度转换;在动画过程中不考虑覆盖不透明度
- 如何增加光滑块高度,而不考虑其内容
- 正则表达式不考虑 .在JavaScript中进行模式测试时
- $browser.notifyWhenNoOutoutstanding Requests不考虑控制器功能
- getAttribute('href') 始终返回“#”,而不考虑移动浏览器上的实际 href 属性
- 使用jQuery查找元素的下一个实例,而不考虑关系