我有父子关系的桌子。如果删除父亲,则删除其下的儿子。您也可以删除单个儿子。到目前为止我的代码没有删除具有相应id的父亲或者儿子,它删除了表中的第一件事。 这是我的代码:
<script>
function delVesselAll(num){
$("#vessel_tab #father" + num).remove();
$("#vessel_tab .son" + num).remove();
document.getElementById(id).style.display = 'block';
};
function delSon(num){
$("#vessel_tab #son" + num).remove();
document.getElementById(id).style.display = 'block';
};
</script>
我的HTML:
<table id="vessel_tab">
<tr id="father1">
<td colspan="2" class="father_header">Father 1</td>
<td><a style="text-decoration:none;" onclick="showModal('delAllModal')"><input type="button" value="delete" onclick="showModal('delAllModal')"></a></td>
<div class="delModal" style="z-index:999999; margin-left:200px; margin-top:10px; display:none" id="delAllModal">
Are you sure you want to delete the father and corresponding sons?<br /><input type="button" value="Cancel" class="hide" onclick="hideModal('delAllModal')"/><input type="button" value="Delete" onclick="delVesselAll(1)" id="delete"/></div>
</tr>
<tr class="son1" id="son1">
<td> </td>
<td>Son 1</td>
<td><a style="text-decoration:none;" onclick="showModal('delSonModal')"><input type="button" value="delete"></a></td>
<div class="delModal" style="z-index:999999; margin-left:200px; margin-top:30px; display:none" id="delSonModal">
Please confirm deletion.<br /><input type="button" value="Cancel" class="hide" onclick="hideModal('delSonModal')"/><input type="button" value="Delete" onclick="delSon(1)"/></div>
</tr>
<tr class="son2" id="son2">
<td> </td>
<td>Son 2</td>
<td><a style="text-decoration:none;" onclick="showModal('delSonModal')"><input type="button" value="delete"></a></td>
<div class="delModal" style="z-index:999999; margin-left:200px; margin-top:30px; display:none" id="delSonModal">
Please confirm deletion.<br /><input type="button" value="Cancel" class="hide" onclick="hideModal('delSonModal')"/><input type="button" value="Delete" onclick="delSon(2)"/></div>
</tr>
<tr id="father2">
<td colspan="2">Father 2</td>
<td><a style="text-decoration:none;" onclick="showModal('delAllModal')"><input type="button" value="delete"></a></td>
<div class="delModal" style="z-index:999999; margin-left:200px; margin-top:10px; display:none" id="delAllModal">
Are you sure you want to delete the father and corresponding sons?<br /><input type="button" value="Cancel" class="hide" onclick="hideModal('delAllModal')"/><input type="button" value="Delete" onclick="delVesselAll(2)" id="delete"/></div>
</tr>
<tr class="son3" id="son3">
<td> </td>
<td>Son 3</td>
<td><a style="text-decoration:none;" onclick="showModal('delSonModal')"><input type="button" value="delete"></a></td>
<div class="delModal" style="z-index:999999; margin-left:200px; margin-top:30px; display:none" id="delSonModal">
Please confirm deletion.<br /><input type="button" value="Cancel" class="hide" onclick="hideModal('delSonModal')"/><input type="button" value="Delete" onclick="delSon(3)"/></div>
</tr>
<tr class="son4" id="son4">
<td> </td>
<td>Son 4</td>
<td><a style="text-decoration:none;" onclick="showModal('delSonModal')"><input type="button" value="delete"></a></td>
<div class="delModal" style="z-index:999999; margin-left:200px; margin-top:30px; display:none" id="delSonModal">
Please confirm deletion.<br /><input type="button" value="Cancel" class="hide" onclick="hideModal('delSonModal')"/><input type="button" value="Delete" onclick="delSon(4)"/></div>
</tr>
</table>
另外,jsfiddle。它不能正常工作(不知道我做错了什么),但我的代码就在那里。提前致谢! http://jsfiddle.net/7tFFS/1/
答案 0 :(得分:1)
我清理了一些东西并重构了你的代码。这是JSFiddle。
HTML:
<div class="delModal" style="z-index:999999; margin-left:200px; margin-top:10px; display:none"
id="delAllModal">Are you sure you want to delete the father and corresponding sons?
<br
/>
<input type="button" value="Cancel" class="hide" />
<input type="button" value="Delete" class="delete" />
</div>
<div class="delModal" style="z-index:999999; margin-left:200px; margin-top:30px; display:none"
id="delSonModal">Please confirm deletion.
<br />
<input type="button" value="Cancel" class="hide" />
<input type="button" value="Delete" class="delete" />
</div>
<table id="vessel_tab">
<tr id="father1">
<td colspan="2" class="father_header">Father 1</td>
<td>
<input type="button" value="delete" class="delete" />
</td>
</tr>
<tr class="son1" id="son1" data-father="father1">
<td> </td>
<td>Son 1</td>
<td>
<input type="button" value="delete" class="delete" />
</td>
</tr>
<tr class="son2" id="son2" data-father="father1">
<td> </td>
<td>Son 2</td>
<td>
<input type="button" value="delete" class="delete" />
</td>
</tr>
<tr id="father2">
<td colspan="2">Father 2</td>
<td>
<input type="button" value="delete" class="delete" />
</td>
</tr>
<tr class="son3" id="son3" data-father="father2">
<td> </td>
<td>Son 3</td>
<td>
<input type="button" value="delete" class="delete" />
</td>
</tr>
<tr class="son4" id="son4" data-father="father2">
<td> </td>
<td>Son 4</td>
<td>
<input type="button" value="delete" class="delete" />
</td>
</tr>
</table>
JS:
function showModal(id, child) {
var $modal = $(child ? "#delSonModal" : "#delAllModal");
$modal.fadeIn("slow")
.find(".delete")
.one("click", function () {
$("#" + id + ", [data-father=" + id + "]").fadeOut("slow");
$modal.fadeOut("slow");
});
}
$("input.hide").click(function () {
$(this).closest("div.delModal").fadeOut("slow");
});
$("#vessel_tab input.delete").bind("click", function () {
var $tr = $(this).closest("tr");
showModal($tr.attr("id"), !!$tr.data("father"));
});
编辑:
由于您使用了in-HTML onClick处理程序,您的小提琴无效。这不一定是错的,但JSFiddle似乎并不喜欢它。我用jQuery处理程序替换了那些。
在HTML中,您不必重复对话,所以我把它们拿出来放在桌子外面。还有一些锚标签也是多余的,我删除了。我还在输入标签的末尾添加了斜杠......并非真的有必要,但是XHTML需要它并且它让Fiddle变得疯狂,所以就是这样。我在某些地方使用类而不是ID(比如取消/删除按钮)来提供一种简单的方法来在jQuery中作为一组引用它们。 (如果没有事情发生,你就不能拥有重复的ID标签。)所有儿子的data-father
标签是showModal
中稍后用来确定哪个对话框(delAllModal
或{{ 1}})应该显示,更重要的是将儿子与他们的父亲联系起来,以便将他们作为一个整体删除。
在JS中:
delSonModal
。showModal
连接对话框中的两个“取消”按钮。$("input.hide").click...
连接表中的所有删除按钮。它基本上只是$("#vessel_tab input.delete")...
... showModal
:
showModal
行会根据点击的按钮是否为儿童来选择要显示的对话框。var $modal...
,而不是one
。这将为按钮创建一个单击处理程序,但在使用它时会立即将其处理掉。 on
可能会很好,但这样可以减少后果。on
属性的任何元素调用fadeOut
- 实际上是ID的子项。对于父亲来说,这隐藏了父亲和儿子。对于Sons,它只隐藏了Son,因为没有元素会有data-father
属性与Son的ID匹配。我希望这一切都很清楚。快乐黑客!
答案 1 :(得分:0)
我会稍微改变html的结构。
为什么不添加包含在父元素下的儿子。 例如:
<tr id="father_1">
<td class="father_1">Father 1</td>
<td class="son_of_f1" id="son_1">Son 1</td>
<td class="son_of_f1" id="son_2">Son 2</td>
<td class="son_of_f1" id="son_3">Son 3</td>
<td class="son_of_f1" id="son_4">Son 4</td>
</tr>
然后你可以用JQuery做
$('#father_1').fadeOut(500);
$('.son_of_f1').fadeOut(500);`
您可以将_1
设置为动态并将其保存到变量
注意:为每个儿子使用类而不是IDS更好,因为你不能让两个儿子拥有相同的id。