javascript - 扩展 jquery 选择器返回比预期更多的数据

标签 javascript jquery

我正在尝试扩展 jquery 选择器(这是第一次),并且我正在尝试为与我在这个项目上一起工作的 friend 获得更具可读性和可维护性的代码。

我试图找到所有具有属性 deletable=true 的元素,所以当我在 firebug 中查找这些元素时,如下所示:

$('.wrapper[deletable="true"]')

我得到了正确的结果。

但是当我尝试将其缩短为:

$(':deletable')

所以我尝试像这样扩展 jquery 选择器:

$.extend($.expr[':'], {
    deletable: function(el) {
      return $(el).find('[deletable="true"]').length > 0
    }
  });

由于某种原因,当我在 firebug 中尝试 $(":deletable") 时,我得到了 html body mainContainer ..我也得到了可删除的元素,但是我得到了这些我不需要的额外元素,例如 body/html 元素。

我做错了什么?

最佳答案

看看您的自定义选择器在做什么:

return $(el).find('[deletable="true"]').length > 0

现在,您正在使用 :deletable 调用您的自定义选择器。这在功能上等同于 *:deletable。这意味着您的选择器正在做:

$('*').find('[deletable="true"]').length > 0

这是查找包含具有该属性的元素的所有元素,包括 bodyhtml

关于javascript - 扩展 jquery 选择器返回比预期更多的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18661236/

相关文章:

jquery - 在 jquery 验证器中添加自定义方法

php - 通过ajax返回的javascript代码,但不显示

javascript - 单击更改 Div 标题

javascript - 在放入 RegEx 之前应该转义的所有字符的列表?

javascript - 清除ajax调用上的图表数据

javascript - 带有 CSS 选择箭头的样式

javascript - 动态为 HTML 中的 URL 添加标题属性

javascript - window.prompt 和 prompt 之间有什么真正的区别?

javascript - 谷歌图表工具提示不工作

javascript - 为什么 sort() JavaScript 函数在 Firefox 中有效,但在 Chromium 中无效?