Javascript 我想删除从表中选择的多行,dom正在更改,但它正在删除html页面上最后一行中的行
我想在右键单击菜单选项的复选框选择中删除多行,在我的控制器中,我可以获取索引并从DOM中删除值,但在html页面上,值不会根据选择删除,而是从最后一个菜单选项中删除行 这是我的controller.jsJavascript 我想删除从表中选择的多行,dom正在更改,但它正在删除html页面上最后一行中的行,javascript,html,angularjs,Javascript,Html,Angularjs,我想在右键单击菜单选项的复选框选择中删除多行,在我的控制器中,我可以获取索引并从DOM中删除值,但在html页面上,值不会根据选择删除,而是从最后一个菜单选项中删除行 这是我的controller.js $scope.tableSelection = {};//used for getting checkbox selection ['Delete', function ($itemScope) { for (var i = $rootScope.rows.length - 1
$scope.tableSelection = {};//used for getting checkbox selection
['Delete', function ($itemScope) {
for (var i = $rootScope.rows.length - 1; i >= 0; i--) {
if ($scope.tableSelection[i]) {
//delete row from data
$rootScope.rows.splice(i, 1);
//delete rowSelection property
delete $scope.tableSelection[i];
}
}
}];
在控制器中,dom正在正确更改,这意味着,$rootscope.rows
中的值将根据选择被删除
这是我的html页面
<div id="table" context-menu="menuOptions" ng-controller="dictionaryElementsController">
<tbody>
<tr ng-repeat="row in rows track by $index" ng-class="{'success' : tableSelection[$index]}">
<td>
<input type="checkbox" ng-model="tableSelection[$index]">
</td>
<td ng-repeat="col in output_columns track by $index">
<enter data>
</td>
<td ng-repeat="col in input_columns track by $index">
<enter data>
</td>
</tr>
</tbody>
</div>
输入数据
输入数据
我应该怎么做才能根据选择删除行,而不是从html页面的最后一行删除行。
有人能帮我解决这个问题吗?你可以看到,使用香草javascript非常简单
var table=document.getElementById('sample');
var remove=document.getElementById('remove');
remove.addEventListener('click',函数(e){
表1.deleteRow(0);
});代码>
单元1,1单元1,2单元1,3
单元格2,1单元格2,2单元格2,3
单元格3,3,3,3,3
删除
您正试图删除(…)
迭代中的项目,因此删除任何项目后,数组将重置,下次删除错误的项目。这只适用于单个项目的删除,不适用于多个项目的删除
您需要创建包含未删除项的新数组您可以使用过滤器
像这样做
$scope.removeSelectedItems = function () {
$scope.rows = $scope.rows.filter(function (item, index) {
return !($scope.tableSelection[index] !== undefined && $scope.tableSelection[index]);
});
$scope.tableSelection = {};
}
注意-不要弄乱$rootScope
,因为它是应用程序级全局应用程序,请使用相应控制器的$scope
检查一下我做错的事情是使用track by。。如果我们不使用track by,那么angular本身会跟踪对象,并在每个对象中插入$$hashkey。因此,从HTML页面中的ng repeat中删除track by后,我的逻辑工作正常。您可以向表中添加任何唯一的列。 注意:如果没有唯一列,请添加一个。可能是时间跨度
<div id="table" context-menu="menuOptions" ng-controller="dictionaryElementsController">
<tbody>
<tr ng-repeat="row in rows track by $index" ng-class="{'success' : tableSelection[$index]}">
<td>
<input type="checkbox" ng-model="tableSelection[row.Id]">
</td>
<td ng-repeat="col in output_columns track by $index">
<enter data>
</td>
<td ng-repeat="col in input_columns track by $index">
<enter data>
</td>
</tr>
</tbody>
</div>
$scope.tableSelection = {};//used for getting checkbox selection
['Delete', function ($itemScope) {
for (var i = $rootScope.rows.length - 1; i >= 0; i--) {
if ($scope.tableSelection[$scope.row[i].UId]){
//delete row from data
$rootScope.rows.splice(i, 1);
//delete rowSelection property
delete $scope.tableSelection[i];
}
}
}];
输入数据
输入数据
$scope.tableSelection={}//用于获取复选框选择
['Delete',函数($itemScope){
对于(变量i=$rootScope.rows.length-1;i>=0;i--){
if($scope.tableSelection[$scope.row[i].UId]){
//从数据中删除行
$rootScope.rows.splice(i,1);
//删除行选择属性
删除$scope.tableSelection[i];
}
}
}];
@好的,所以我对你想做什么有些困惑。您想从表中删除行吗?是的,我想从表中删除行,为什么不使用JavaScript呢!我尝试使用javascript var table=document.getElementsByTagName('table');表[0]。childNodes[3]。removeChild(表[0]。childNodes[3]。childNodes[i*2]);表[0]。childNodes[3]。removeChild(表[0]。childNodes[3]。childNodes[i*2])//添加这一行是因为为一个条目创建了两个标记,一个是注释,这是正确的方法。我之所以使用I*2,是因为我按照angular var$rootscope.rows获取索引,在html中,值是2对的,1个条目表示值,1个条目表示注释。但对于零索引,我必须使用angularjs再次检查Nop,为什么您建议使用纯javascript?她如何将这个代码与angular相匹配?我不是angular方面的专家,但据我所知,你可以使用它!在angular中是否有任何方法可以从表中删除行。感谢@Reza和Gacci提供的宝贵帮助:)