如何用jQuery的:not选择器实现多规则排除特定格式的href链接?
嘿,我来帮你搞定这个jQuery选择器的问题!你之前的写法主要是CSS选择器的语法用错了,因为jQuery的:not()支持多个选择器,但得用正确的格式来写“或”条件。
问题出在哪?
你之前尝试的$"a:not(a[href^='#','javascript'])"和带||的写法都不符合CSS选择器规则:
- CSS选择器里没有
||这种逻辑或语法,多个选择器的“或”是用逗号分隔 :not()内部不需要重复写a标签,因为外层已经指定了选择a元素- 第二个条件没写完整的属性选择器(应该是
[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
相关产品推荐
相关产品推荐

