如何评估字符串中的 ?JS代码比较及空格显示疑问
问题解析与解决方案
一、为什么两个console.log都返回false?
你写的HTML代码<span id="wsk">CASE&nbsp;</span>里,&是标准HTML实体,浏览器解析时会把它转换成普通的&字符,剩下的nbsp;就是纯文本的n、b、s、p、;这几个字符。所以document.getElementById('wsk').textContent实际拿到的字符串是"CASE&nbps;"——既不是你写的源码实体字符串,也不是带空格的字符串,自然两个判断都不匹配,返回false。
二、如何修改判断值使其返回true?
分两种场景来调整:
场景1:你原本想让span显示CASE加一个非断空格
先修正HTML代码,把<span id="wsk">CASE&nbsp;</span>改成<span id="wsk">CASE </span>(直接用 实体)。此时textContent获取到的是"CASE"加上非断空格字符(Unicode编码U+00A0),对应的判断代码可以写成:
// 用Unicode转义字符匹配非断空格 console.log(document.getElementById('wsk').textContent === "CASE\u00A0"); // 或者通过String.fromCharCode生成非断空格 console.log(document.getElementById('wsk').textContent === "CASE" + String.fromCharCode(160));
场景2:你确实想让span显示CASE&nbps;这段文本
直接匹配解析后的真实文本内容即可:
console.log(document.getElementById('wsk').textContent === "CASE&nbps;");
三、为什么替换成真实空格无法显示?
这里的“真实空格”应该是指你在HTML源码里直接输入的普通空格(Unicode U+0020)。HTML有默认的排版规则:连续的普通空格会被合并成一个,且如果空格处于元素开头、结尾或者某些特殊排版位置,浏览器会直接忽略它,导致看起来“无法显示”。
而 对应的是非断空格(U+00A0),它不会被浏览器合并或忽略,能稳定占据一个字符的位置,所以可以正常显示出来。
内容的提问来源于stack exchange,提问作者shenkwen
相关产品推荐
相关产品推荐

