javascript - jQuery 和 Prototype 方法相互干扰

标签 javascript jquery dom prototypejs

我正在开发一个遗留项目(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/

相关文章:

javascript - 按索引对字符串数组进行排序

jquery - 选择其他特定 div 时,将某些 div 的不透明度设置为 .7

javascript - 如何使用 JavaScript 列出 DOM 节点的所有已注册事件?

html - CSS 选择器 : Navigating the DOM

html - 如何使用 Typescript 在 React 中扩展 HTML 属性

javascript - 带有详细 JSON 的 Amcharts

javascript - 使用 Angular foreach 推送对象

javascript - 如何对所有分页项目应用过滤器并仅显示过滤后的项目?

javascript - 如何在 ruby​​ on rails 中对 onclick-javascript 调用操作

javascript - "this"返回函数而不是对象