我有这个代码示例。单击“添加新行”按钮时,它会添加新行。下拉列表根据值确定要添加到每一行的元素。用户可能会选择错误的选择并更改选择(现在它不会清除已存在的项目)。我尝试过这一行,但它不起作用:$(this).closest("div.fields .actionitems").remove();
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<div id="elem">
<!-- If there are software installed, then show them -->
<div class="row-fluid">
<div class="span3">Action</div>
<div class="span3">Phone Number</div>
<div class="span3">First and Last Name</div>
<div class="span3">Address</div>
<div class="span3"></div>
</div>
</div>
<a href="#" id="addElem">Add a line</a>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type='text/javascript' src='http://code.jquery.com/jquery-1.8.3.js'></script>
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
<script type="text/javascript">
$(function () {
var softwareOptions = '<option value="">Please select an action</option>';
softwareOptions += '<option value="1">Delete</option> \
<option value="2">Move</option> \
<option value="3">New</option> \
<option value="4">Swap</option> ';
//add element to elem div
$("#addElem").click(function () {
var new_id = new Date().getTime();
var content = '<div class="fields"> \
<input type="hidden" name="assetSoftware.Index" value="' + new_id + '" /> \
<div class="row-fluid"> \
<div class="span3"> \
<select class="chzn-select softName" id="assetSoftware[' + new_id + '].softName" name="assetSoftware[' + new_id + '].softName">' + softwareOptions + '</select> \
</div> \
</div> \
</div>';
$("#elem").append(content);
});
//remove fields
$("#elem").on("click", ".remove", function () {
$(this).closest("div.fields").remove();
});
//action type selected
$("#elem").on("change", ".softName", function () {
$(this).closest("div.fields .actionitems").remove();
var test = "";
var new_id = new Date().getTime();
if ($(this).val() == 4) {
test = '<div class="actionitems">Person 1\
<div class="span3"> \
<input type="text" name="assetSoftware[' + new_id + '].phone" /> \
</div> \
<div class="span3"> \
<input type="text" name="assetSoftware[' + new_id + '].usernames" /> \
</div> \
<div class="span3"> \
<input type="text" name="assetSoftware[' + new_id + '].address" /> \
</div> \
Person 2\
<div class="span3"> \
<input type="text" name="assetSoftware[' + new_id + '].phone" /> \
</div> \
<div class="span3"> \
<input type="text" name="assetSoftware[' + new_id + '].usernames" /> \
</div> \
<div class="span3"> \
<input type="text" name="assetSoftware[' + new_id + '].address" /> \
</div> \
<div class="span3"> \
<a class="remove" href="#">X</a> \
</div></div>';
}
else {
test = '<div class="actionitems">\
<div class="span3"> \
<input type="text" name="assetSoftware[' + new_id + '].phone" /> \
</div> \
<div class="span3"> \
<input type="text" name="assetSoftware[' + new_id + '].usernames" /> \
</div> \
<div class="span3"> \
<input type="text" name="assetSoftware[' + new_id + '].address" /> \
</div> \
<div class="span3"> \
<a class="remove" href="#">X</a> \
</div>\
</div>';
}
$(this).closest("div.fields").append(test);
});
});
</script>
</body>
</html>
答案 0 :(得分:1)
.closest()
根据jQuery
文档:
对于集合中的每个元素,通过测试元素本身并遍历DOM树中的祖先来获取与选择器匹配的第一个元素。
$(this).closest("div.fields .actionitems").remove();
的问题在于div.fields .actionitems
(指的是.actionitems
div
不是this
的DOM父级(即{ {1}}元素)。
但是,select
是可以在div.fields
找到的父元素。您应该使用.closest()
和$(this).closest("div.fields").find(".actionitems")
.find()
.actionitems
,然后使用div
将其删除。
答案 1 :(得分:0)
试试这个,替换:
$(this).closest("div.fields .actionitems").remove();
使用:
$(this).parent().parent().next().remove();
此代码选择包含select
的行的下一行并将其删除。