如何过滤jQuery对象,同时保留text-element类和无类文本节点?
问题原因
你之前的筛选方式无效,核心原因是jQuery的选择器筛选逻辑仅作用于元素节点,集合中的纯文本节点会被直接排除在筛选结果外,所以不管怎么调整选择器,都匹配不到你要的文本节点。$content.filter('.text-element,:not([class])')里的:not([class])也只能匹配没有class属性的元素节点,对纯文本节点完全不生效。
解决方案
用filter传入自定义回调函数的方式,手动判断每个节点的类型和属性,代码如下:
// 筛选出所有符合要求的节点 const $validNodes = $content.filter(function() { // nodeType === 3 代表纯文本节点 if (this.nodeType === 3) return true // 元素节点判断是否携带 text-element 类 return $(this).hasClass('text-element') }) // 校验所有节点都符合要求 const isAllValid = $validNodes.length === $content.length
如果isAllValid值为true,就说明集合里所有对象要么是.text-element元素,要么是纯文本节点。
内容的提问来源于stack exchange,提问作者NastyDiaper
相关产品推荐
相关产品推荐

