You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何==与!=逻辑异常?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:10:44