如何使用jQuery查找完全不带任何属性的span元素
问题说明
我已经掌握了查找缺少某个特定属性的元素的方法,现在需要用jQuery查找完全没有任何属性的<span>元素。
举个例子,我需要的选择器可以匹配这类元素:
<span>Some stuff here</span>
但要排除所有带任意属性的span,包括但不限于:
<span id='foo'>Some stuff here</span> <span class='FooCls'>Some stuff here</span>
请问该如何实现?
解决方案
可以通过判断原生DOM元素的attributes集合长度来实现筛选,有两种常用实现方案:
方案1:注册自定义伪类选择器(可复用)
先注册全局自定义选择器,后续所有地方都可以直接调用:
// 注册名为noAttr的自定义伪类 $.expr.pseudos.noAttr = function(el) { // 元素属性集合长度为0说明无任何属性 return el.attributes.length === 0; }; // 调用方法,直接筛选无属性的span const noAttrSpans = $('span:noAttr');
方案2:直接使用filter方法筛选(无需注册)
如果只是单次使用,不需要复用筛选逻辑,可以直接用filter方法实现:
const noAttrSpans = $('span').filter(function() { return this.attributes.length === 0; });
原理解释
原生DOM元素的attributes属性是一个只读的类数组集合,存储了元素绑定的所有属性(包括id、class、自定义data属性、行内style等所有类型的属性)。只要元素带有任意一个属性,该集合的长度就≥1,只有完全没有任何属性的元素,该集合的长度才等于0,完美匹配筛选需求。
内容的提问来源于stack exchange,提问作者HerrimanCoder
相关产品推荐
相关产品推荐

