扩展jquery选择器返回的数据比它应该返回的要多
Extending jquery selector returns more data than it's supposed to
我正在尝试扩展jquery选择器(第一次),我正在尝试为与我一起完成该项目的朋友获取更具可读性和可维护性的代码。
我正在尝试查找所有具有属性deletable=true
的元素 因此,当我像这样在火虫中查找这些元素时:
$('.wrapper[deletable="true"]')
我得到正确的结果。
但是当我尝试将其缩短为:
$(':deletable')
所以我尝试像这样扩展jquery选择器:
$.extend($.expr[':'], {
deletable: function(el) {
return $(el).find('[deletable="true"]').length > 0
}
});
出于某种原因,当我尝试在火虫中$(":deletable")
时,我的结果html body mainContainer
..我也得到了可删除的元素,但我得到了这些我不需要的额外元素,如 body/html 元素。
我做错了什么?
看看你的自定义选择器在做什么:
return $(el).find('[deletable="true"]').length > 0
现在,您将使用 :deletable
调用自定义选择器。这在功能上等效于 *:deletable
。这意味着您的选择器正在执行以下操作:
$('*').find('[deletable="true"]').length > 0
这是查找包含具有该属性的元素的所有元素,包括 body
和 html
.
如果使用 find
,任何具有与选择器匹配的子元素都将返回 true。看来你正在尝试这样做
return $(el).is('[deletable="true"]');
您的选择器正在查找具有属性 deletable="true"
的子元素的所有元素。
相反,您可以执行以下操作:
$.extend($.expr[':'], {
deletable: function(el) {
return $(el).is('[deletable="true"]'); // Check if this element has the attribute
}
});
这将仅返回具有该属性的元素。
JSFiddle 示例
jQuery说body和html包含具有属性deletable=true
的元素。我会检查attr
而不是使用 find('[deletable="true"]).length
因为这会计算每个 DOM 对象中的所有内容。
相关文章:
- AJAX调用并在Node中获取返回数据
- 角度服务未返回数据
- 统计ajax返回数据中的html元素
- 有没有更好的方法可以测量从Ajax调用返回数据所需的总时间
- Imgur API图像搜索未返回数据
- javascript对象显示为null,但object.properties返回数据
- 如何从ajax调用JQuery返回数据
- 试图从嵌套的回调函数返回数据
- NodeJS FS 不从多个文件返回数据
- ajax函数未在C#中返回数据
- 如何在公共js模块中从web服务返回数据
- 将字符串与 JSON 对象组合以返回数据
- 嵌套异步函数未及时返回数据的问题
- NodeJS JSONStream 以一个长字符串的形式返回数据
- 如何使用 HTML 图像请求将数据发送到服务器,或返回数据作为响应
- 从 Angular 模态服务中的模态主体模板返回数据
- jQuery 每个循环返回数据两次
- $.getJSON 在返回数据后不会运行函数
- 如何访问返回数据中的特定json值
- 工厂返回数据后未设置角度$scope