在Angular数组上使用splice()时,jQuery选择器跳转到下一项
jQuery selector jumps to next item when using splice() on Angular array
我试图在删除之前选择项目的dom对象。我将下面的函数连接到ng-repeat项中的Delete按钮的ng-click,并将$event对象作为参数传递。
$c = $($event.target)
$c.css('background','red');
$scope.post[$postIndex].comments.splice($index,1);
选择是正确的,但是在删除/拼接行之后(在原始DOM对象被销毁之后),$c成为下一项的删除按钮的选择器——样式被转移了。这怎么可能呢?
我怀疑Angular比jQuery选择条目的速度更快,我试着把删除行包装在$timeout中,但无济于事。
(我试图在一个更简单的jfiddle中重现这个问题,但没有成功,在可能的答案之后,我会更新这篇文章,可能的干扰)
这就解决了:
var targetID = '#' + $event.target.id;
$c = $(targetID);
$scope.post[$postIndex].comments.splice($index,1);
根据我目前的研究,这就是ng-repeat(实际上也是Angular)的工作方式:它重用以前的DOM元素(连同它们的所有属性)。不支持在Angular之外编辑DOM。有时你可以绕过这个条件,但有时不能…
Update:在这个特殊情况下,问题是我在重复中使用了track by $index,删除它将解决DOM不匹配。然而,这仍然是一个混乱的解决方案,只有在您不想再编辑该元素时才建议这样做,并且还包括性能损失。
相关文章:
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 从GWT中的HighCharts库(以及一般的Javascript)自定义Stockchart范围选择器按钮
- $q.all当输入数组中的一项不是promise时,Typescript检查器失败
- AngularJS引导日期选择器 - 每周的一天问题
- insertAfter只使用类选择器一次
- 如何使用replaceWith()一次替换多个选择器
- 如何从剑道日期选择器中只获得一年
- 更改第二个日期时的第一个日期选择器将自动更改一年
- 有没有一种方法可以让jQuery日期选择器在没有年份的情况下工作
- Jquery选择器用于第一个'一、二、三和X'元素和:not()
- Jquery日期选择器从选定的epoch时间减少一天
- JQuery 从类选择器上的数据属性创建一个数组
- 我想将一组jquery选择器存储为要延迟评估的数据结构
- 带有类选择器的 jQuery 点击事件只触发一次
- 如何使引导日期选择器选择当分钟视图模式:1时选择当月的最后一天而不是第一天
- 列表项选择器,不带具有特定类的项
- 哪个查询选择器可以找到与另一个数组中的任何项匹配的任何数组项
- 在Angular数组上使用splice()时,jQuery选择器跳转到下一项
- 下拉菜单,选择一项时调用一个函数,选择另一项时调用另一个函数
- backbone.js中jQuery.find的CSS选择器等效项