如何检测URL中是否存在哈希值?URI.js使用异常问题咨询
解决URI.js判断URL哈希值的问题
看起来你的代码逻辑本身没问题,但没得到预期结果大概率是这几个原因,我给你拆解下:
先排查问题根源
你可以先在代码里加一行调试输出,看看uriFragment实际是什么值:
var uriFragment = new URI(window.location.href).fragment(); console.log('当前fragment值:', uriFragment); // 看看是不是空字符串,或者有隐形字符 if (uriFragment.length) { console.log('yep') } else { console.log('nope') }
如果输出的uriFragment是空字符串但length不为0,那大概率是有隐形空白字符(比如空格、换行),这种情况可以先做个trim处理:
if (uriFragment.trim().length) { console.log('yep') } else { console.log('nope') }
更简单的替代方案(不依赖URI.js)
其实判断URL是否有哈希值,用浏览器原生API就足够了,不需要额外依赖库,逻辑更直观:
// window.location.hash会返回带#的哈希部分,没有哈希则是空字符串 if (window.location.hash) { console.log('yep'); } else { console.log('nope'); }
如果需要获取不带#的哈希内容,也可以用window.location.hash.slice(1),这样和URI.js的fragment()返回值完全一致。
回到URI.js的问题
如果调试后发现uriFragment确实是空字符串,但length还是不为0,那可能是你使用的URI.js版本有bug,建议升级到最新版再测试。另外也要确认测试的URL真的没有哈希值——有时候复制URL时可能不小心带了个单独的#,这种情况fragment()会返回空字符串,但window.location.hash会是#,这时候你的原代码会进入else分支,你可以检查下URL末尾有没有遗漏的#。
内容的提问来源于stack exchange,提问作者KSPR
相关产品推荐
相关产品推荐

