在Angular数组上使用splice()时,jQuery选择器跳转到下一个项目

时间:2014-07-16 10:35:18

标签: javascript jquery angularjs

我试图在删除之前选择项目的dom对象。我将下面的函数连接到一个删除按钮,在ng-repeated项目内部单击,将$ event对象作为参数传递。

$c = $($event.target)
$c.css('background','red');
$scope.post[$postIndex].comments.splice($index,1);

选择正确,但在删除/拼接线之后(在销毁原始DOM对象之后), $ c成为下一个项目删除按钮的选择器 - 样式转移。这怎么可能?

怀疑Angular比jQuery如何选择项目更快,我试图将删除行包装在$ timeout中,但无济于事。

(我试图在一个简单的jsfiddle中不成功地重新创建这个问题,在一个可能的答案之后,我会更新这篇文章并留下可能的干扰)

2 个答案:

答案 0 :(得分:0)

那应该解决它:

var targetID = '#' + $event.target.id;
$c = $(targetID);
$scope.post[$postIndex].comments.splice($index,1);

答案 1 :(得分:0)

正如我目前的研究所表明的那样,这只是ng-repeat(和Angular,真的)的工作方式:它重用了以前的DOM元素(以及它们的所有属性)。在Angular之外编辑DOM是not supported。有时你可以绕过这种情况,但有时候不能......

更新:在这种特殊情况下问题是我在重复中使用$ index跟踪,删除它会解决DOM不匹配问题。但是,这仍然是一个混乱的解决方案,只有在您不想再编辑该元素时才会建议,并且还包括性能损失。