如何使用jQuery判断DOM元素是否仅包含n-dash(–)字符
如何判断DOM元素是否仅包含n-dash符号
首先明确核心原因:–是HTML实体,对应的实际字符为en dash(短破折号),Unicode编码是U+2013,和普通键盘输入的减号-(Unicode编码U+002D)是完全不同的字符,因此直接比对普通减号必然不匹配。
你之前的4种写法全部返回false的原因分别是:
$('p').text()=="-":.text()返回的是解析后的en dash实际字符,和普通减号字符不匹配$('p').html()=="-":.html()的返回值要么是en dash字符,要么是–实体串,不可能返回普通减号$('p').text()=="–":.text()会自动解析HTML实体为实际字符,不会返回实体编码字符串$('p').html()=="–":不同浏览器对.html()的返回处理逻辑有差异,部分浏览器会直接把实体解析为字符返回,不会原样输出–,判断结果不稳定
正确实现方式
方案1:直接匹配Unicode字符(最稳妥)
使用en dash的Unicode转义序列比对,不受文件编码和浏览器差异影响,推荐使用:
// 加trim是为了过滤元素内可能存在的空格、换行等空白字符,避免误判 const isOnlyNdash = $('p').text().trim() === '\u2013'
如果你的项目文件统一使用UTF-8编码,也可以直接写en dash字符本身:
const isOnlyNdash = $('p').text().trim() === '–'
方案2:通过实体转义后比对(兼容性更好)
如果不想硬写Unicode或特殊字符,可以动态创建临时元素把–实体转为实际字符后再比对:
function checkOnlyNdash($target) { const ndashChar = $('<i>').html('–').text() return $target.text().trim() === ndashChar } // 调用示例 console.log(checkOnlyNdash($('p')))
内容的提问来源于stack exchange,提问作者skobaljic
相关产品推荐
相关产品推荐

