为何==与!=逻辑异常?jQuery中href判断不符合预期问题
为啥
==判断不触发alert,换成!=却可以? 嘿,这个反直觉的情况我之前排查过好几次,大概率是这几个原因导致的,咱们一个个说:
href值带隐形空格
有时候HTML里的href可能不小心加了前后空格,比如写成了<a href=" #tab-bbb">或者<a href="#tab-bbb ">. 这时候$(this).find('a').attr('href')拿到的是带空格的字符串,和'#tab-bbb'用==比对自然不相等,换成!=就会触发alert。
解决办法是用trim()去掉前后空白:if ($(this).find('a').attr('href').trim() == '#tab-bbb') { alert('触发成功!'); }大小写不匹配
要是HTML里的href是大写或者混合大小写,比如#Tab-Bbb,而你判断的是全小写的#tab-bbb,==是区分大小写的,所以比对失败。这时候把两边都转成统一大小写就行:if ($(this).find('a').attr('href').toLowerCase() == '#tab-bbb') { alert('触发成功!'); }attr('href')返回了完整URL
如果你的页面设置了<base>标签,或者浏览器自动把相对href解析成了完整URL(比如http://yourdomain.com/#tab-bbb),那attr('href')拿到的就是这个完整地址,和#tab-bbb比对肯定不相等。这种情况建议用prop('hash')来获取锚点部分,它会直接返回#tab-bbb:if ($(this).find('a').prop('hash') == '#tab-bbb') { alert('触发成功!'); }
你可以先排查下你的href实际值是什么,比如在判断前加个console.log($(this).find('a').attr('href')),看看输出的内容和#tab-bbb到底哪里不一样,就能快速定位问题啦!
内容的提问来源于stack exchange,提问作者zac1987
相关产品推荐
相关产品推荐

