我正在开发一个遗留项目(Rails 3.1 之前的版本),该项目已经存在多年,因此它到处都是 Prototype 和 jQuery,总体思路是用 jQuery 重写所有 Prototype。
我正在解决自动完成样式下拉列表的问题,它将用一些数据填充 DOM 中的区域。这工作正常,但此自动完成的某些实例有项目限制。所以在添加数据时,它会检查某个选择器是否超过N个,然后删除最后一个。
我执行此操作的功能很简单:
function remove_items(num, selector) {
while (selector.length >= num) {
selector[selector.length-1].remove()
}
};
我传入限制和对象数组,用 jQuery 选择,我希望有一个限制。
问题似乎是选择器中元素上的 .remove() 会使用 Prototype 方法将其从 DOM 中删除,即使它是一个 jQuery 对象。然后,因为选择器数组尚未更改,所以循环使用原型(prototype)方法再次运行,并抛出错误,因为现在元素不在 DOM 中。
我在循环之前创建了一个选择器长度的计数变量,并每次将其减一,但显然这是一个不太理想的解决方案。
有人知道为什么会发生这种情况或如何阻止它发生吗?
最佳答案
如果 selector
是 native 数组,您只需使用以下方法即可将其 chop 为 num
项:
selector.splice(num);
如果selector
是一个jQuery对象,尝试就地修改它是不好的做法 - 其他jQuery函数返回一个新 jQuery对象,即
selector = selector.slice(0, num);
请注意,在后一种情况下,将此代码包装在函数中没有什么意义,如果这样做,则必须返回
新对象,而不是依赖于传递的参数就地修改。
关于javascript - jQuery 和 Prototype 方法相互干扰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16566899/