Jquery:更改属于直接父级的特定同级类
Jquery: Alter a specific sibling class that belongs to an immediate parent.
在我的HTML页面上,我有几个表单。
它们都遵循一种模式:
- 每个表单都在一个名为
"form-optional"
的div 中 - 此 DIV 内部是一个复选框,它包装在类
"form-enable"
- 实际形式有一类
"form-main"
。
我想使用Jquery,这样当用户点击复选框时,"form-main"就会被隐藏。但是,只有与单击的复选框属于同一"表单可选"div 的表单才应隐藏。所有其他表格应保持不变。
我知道您可以使用 Jquery 命令 .parent() 来定位类的父类,然后将其与 find() 结合使用以在该 parent() 中查找特定类。但是,当我使用这些命令时,它似乎不起作用。
JSFIDDLE 在这里
这是我的Jquery:
// JavaScript Document
(function($)
{
$(document).ready(function(){
$(".form-optional .form-enable input").click(function(){
if(($this).attr('checked')){
$(this).parent().find('.form-main').fadeIn();
}
else
{
$(this).parent().find('.form-main').fadeOut();
}
});
});
})(jQuery);
这是我的 HTML:
<div class="form-optional">
<p class="form-enable">
<input name="personaldetails" type="checkbox" value="">No Personal Details
</p>
<p class="form-explanation">If this product is a gift, you can tick the box, to omit the personal details</p>
<form name="frmPersonal" class="form-main">
Name:
<input type="text" name="ordPersonalInfo1" value="" onkeyup="Restrict_Chars(this.form.ordPersonalInfo1,30);">
</form>
</div>
<div class="form-optional">
<p class="form-enable">
<input name="friendsdetails" type="checkbox" value="">No Friends Details
</p>
<p class="form-explanation">If you have no friends, you can tick the box to omit friends</p>
<form name="frmPersonal" class="form-main">
Name:
<input type="text" name="ordPersonalInfo1" value="" onkeyup="Restrict_Chars(this.form.ordPersonalInfo1,30);">
</form>
</div>
复选框的父元素是 p
元素,这就是您找不到表单元素的原因(您需要在选中的属性上修复 $ 位置。您可以使用 parents(),但您必须指定您只需要第一个元素,否则它将应用于该类的所有元素。尝试:
$(".form-optional .form-enable input").click(function(){
if($(this).attr('checked')){
$(this).closest('div').find('.form-main').fadeOut();
}
else
{
$(this).closest('div').find('.form-main').fadeIn();
}
});
此外,我在示例中切换了顺序,因为您希望在单击复选框时隐藏,而不是取消单击:
http://jsfiddle.net/8xrQe/5/
你需要这样做:
$(".form-optional .form-enable input").click(function () {
if (($this).attr('checked')) {
$(this).parents().find('.form-main').fadeIn();
} else {
$(this).parents().find('.form-main').fadeOut();
}
});
由于.parent()
该方法仅搜索 DOM 树的一个级别,但.parents()
搜索到 DOM 树的顶层。
因此,当您使用.parent()
方法时,它无法找到form-optional
类div,因此您的代码不起作用。
这是因为form-main
不是父元素的后代,它是复选框元素父元素的同级。因此,基于标记的一种可能的解决方案是查找form-optional
元素,然后在其中查找form-main
。
jQuery(function ($) {
$(".form-optional .form-enable input").change(function () {
if (this.checked) {
$(this).closest('.form-optional').find('.form-main').fadeIn();
} else {
$(this).closest('.form-optional').find('.form-main').fadeOut();
}
}).change();
});
演示:小提琴
使用 .parents()
,但为其指定选择器。
试试这个:
var enableInput = function()
{
var checkbox = $("input[type='checkbox']");
checkbox.click(function(){
if ($(this).is(":checked")) {
$(this).parents(".form-optional").find(".form-main").fadeIn();
} else {
$(this).parents(".form-optional").find(".form-main").fadeOut();
}
});
}
enableInput();
JSFiddle 中的示例。
使用 .next():
给定一个表示一组 DOM 元素的 jQuery 对象,
.next()
方法允许我们搜索紧随其后的 这些元素在 DOM 树中的同级并构造一个新的 jQuery 对象中的匹配元素。
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 如何使用jQuery自动打开页面上的所有链接
- 如何使用jquery在填充自动完成的值后使文本框只读
- jQuery:循环一个具有不同超时值的循环
- 用程序搜索JQuery数据表中的文本
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jQuery匹配JSON对象的部分文本
- Jquery POST未填充数组
- JQuery使计数器每次更改时都会增加
- 如何在Angular2中使用jQuery插件
- 提高JQuery的性能
- 如何使用jQuery访问属于函数内部另一个函数的对象的属性
- Jquery:更改属于直接父级的特定同级类
- 查找属于 JQuery 生成的数组的图像的宽度
- Jquery 解析不属于字符串的句子/行中的整数
- 如何通过 jquery 查找属于动态添加类的所有元素
- 如何从 jquery 中属于同一类成员的元素中获取所有不同的值
- 只在
- 的第一个子元素上应用JQuery属于某一类的
- 如何更改属于jquery.flexslider-min.js文件的jquery-flexslider的高度
- jquery sortable('toArray') 仅当元素属于另一个数组时