HTML结构:
<tr>
<td class="edit"><input type="checkbox" class="editbox" /></td>
<td class="content"><input type="text" class="contentbox" size="40" disabled="disabled"/></td>
<td class="delete"><input type="checkbox" class="deletebox" /></td>
</tr>
我想要什么? 当用户点击input.editbox:
时当用户点击input.deletebox:
时我为这个结构做了这个:
<input type="checkbox" class="editbox"/>
<input type="text" class="contentbox" size="40" disabled="disabled"/>
<input type="checkbox" class="deletebox"/>
使用.next()和.prev()
$(document).ready(function () {
$("#form input.editbox[type=checkbox]").each(function () {
$(this).change(function () {
if ($(this).is(":checked")) {
$(this).next().removeAttr("disabled");
$(this).next().next().attr('checked', false);
} else {
$(this).next().attr("disabled", "disabled");
}
});
});
$("#form input.deletebox[type=checkbox]").each(function () {
$(this).change(function () {
if ($(this).is(":checked")) {
$(this).prev().attr("disabled", "disabled");
$(this).prev().prev().attr('checked', false);
}
});
});
});
但是现在无法为新结构转换jQuery代码。非常感谢任何帮助和想法。
答案 0 :(得分:4)
尝试parent().find(selector)
:
$(document).ready(function () {
$("#form input.editbox[type=checkbox]").each(function () {
$(this).change(function () {
if ($(this).is(":checked")) {
$(this).parent().parent().find('.contentbox').removeAttr("disabled");
$(this).parent().parent().find('.deletebox').attr('checked', false);
} else {
$(this).parent().parent().find('.contentbox').attr("disabled", "disabled");
}
});
});
$("#form input.deletebox[type=checkbox]").each(function () {
$(this).change(function () {
if ($(this).is(":checked")) {
$(this).parent().parent().find('.contentbox').attr("disabled", "disabled");
$(this).parent().parent().find('.editbox').attr('checked', false);
}
});
});
});
在我看来,它比下一个更好的解决方案。这个更加独立于你的html结构的变化。您可以重新排列td中的复选框,代码仍可以使用属性。
答案 1 :(得分:1)
您可以将$(this).closest('tr')
与.find()
一起使用,而不是使用.next()
或.prev()
$(document).ready(function () {
$("#form input.editbox[type=checkbox]").each(function () {
$(this).change(function () {
var $tr = $(this).closest('tr');
if ($(this).is(":checked")) {
$tr.find('.contentbox').removeAttr("disabled");
$tr.find('.deletebox').attr('checked', false);
} else {
$tr.find('.contentbox').attr("disabled", "disabled");
}
});
});
$("#form input.deletebox[type=checkbox]").each(function () {
$(this).change(function () {
var $tr = $(this).closest('tr');
if ($(this).is(":checked")) {
$tr.find('.editbox').attr("disabled", "disabled");
$tr.find('.contentbox').attr('checked', false);
}
});
});
});