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

如何用jQuery的:not选择器实现多规则排除特定格式的href链接?

嘿,我来帮你搞定这个jQuery选择器的问题!你之前的写法主要是CSS选择器的语法用错了,因为jQuery的:not()支持多个选择器,但得用正确的格式来写“或”条件。

问题出在哪?

你之前尝试的$"a:not(a[href^='#','javascript'])"和带||的写法都不符合CSS选择器规则:

  1. CSS选择器里没有||这种逻辑或语法,多个选择器的“或”是用逗号分隔
  2. :not()内部不需要重复写a标签,因为外层已经指定了选择a元素
  3. 第二个条件没写完整的属性选择器(应该是[href^='javascript'],而不是只写javascript)

正确的写法

直接在:not()里用逗号分隔两个属性选择器就行,语法如下:

$("a:not([href^='#'], [href^='javascript'])").on("click", function(event) {
  // 这里写你的点击逻辑
  event.preventDefault(); // 示例:阻止默认跳转
  console.log("点击了非锚点/非javascript链接");
});

另一种更易读的方式(用filter)

如果觉得:not()里的多个选择器看着有点乱,也可以用.filter()方法来筛选,逻辑更直观:

$("a").filter(function() {
  const href = $(this).attr("href");
  // 排除href以#开头,或者以javascript开头的链接
  return !(href && (href.startsWith("#") || href.startsWith("javascript")));
}).on("click", function(event) {
  // 你的逻辑代码
});

这里加了href &&的判断,是为了避免空href的链接被误判,如果你不需要这个可以去掉。

测试一下

你可以把这两种写法放到代码里试试,应该就能正确选中除了锚点链接和javascript伪协议链接之外的所有<a>标签啦~

内容的提问来源于stack exchange,提问作者bhansa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:52:57