Javascript 我想删除从表中选择的多行,dom正在更改,但它正在删除html页面上最后一行中的行

Javascript 我想删除从表中选择的多行,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

我想在右键单击菜单选项的复选框选择中删除多行,在我的控制器中,我可以获取索引并从DOM中删除值,但在html页面上,值不会根据选择删除,而是从最后一个菜单选项中删除行

这是我的controller.js

$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">
         &lt;enter data&gt;
       </td>
       <td ng-repeat="col in input_columns track by $index">
         &lt;enter data&gt;
       </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">
         &lt;enter data&gt;
       </td>
       <td ng-repeat="col in input_columns track by $index">
         &lt;enter data&gt;
       </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提供的宝贵帮助:)