技术求助:仅隐藏<p>标签内9位以上数字,排除<span>标签内内容?
解决方案
现有脚本的问题
- 调用
text()会提取<p>下所有文本(含<span>内的内容),导致span里的数字被误处理 - 正则
/[1-9]+/仅匹配连续1-9数字,只替换第一个匹配项,且未判断数字长度
修改后的代码
$(document).ready(function() { $('#hidenumber').find('p').each(function() { // 遍历p标签下的所有子节点 $(this).contents().each(function() { // 仅处理纯文本节点,跳过span等元素节点 if (this.nodeType === 3 && this.nodeValue.trim() !== '') { // 全局替换所有9位及以上的连续数字为*** this.nodeValue = this.nodeValue.replace(/\d{9,}/g, '***'); } }); }); });
代码说明
contents():获取目标元素下的所有子节点(包括文本节点和元素节点),避免直接提取全部文本nodeType === 3:筛选出纯文本节点(元素节点的nodeType为1),确保span内的内容不被处理- 正则
/\d{9,}/g:匹配任意连续9位及以上的数字,g修饰符实现全局替换所有符合条件的数字串 - 直接修改文本节点的
nodeValue,精准处理目标文本,不干扰子元素
效果验证
输入代码:
<p>隐藏 1234567890<span>显示 0987654321</span></p>
运行后输出:隐藏 *** 显示 0987654321,完全符合需求。
内容的提问来源于stack exchange,提问作者Btc
相关产品推荐
相关产品推荐

