当我用 1.12.4 替换 jquery 版本 1.7 时,出现以下错误:
Uncaught Error: Syntax error, unrecognized expression: a[href*=#]
at Function.fa.error (jquery-1.12.4.min.js:2)
以下是我的代码,我是这个领域的新手,对 javascript 不太了解,有人可以帮我解决这个问题吗? :
$(window).load(function () {
function filterPath(string) {
return string.replace(/^\//, '').replace(/(index|default).[a-zA-Z]{3,4}$/, '').replace(/\/$/, '');
}
$('a[href*=#]').each(function () {
if (filterPath(location.pathname) == filterPath(this.pathname) && location.hostname == this.hostname && this.hash.replace(/#/, '')) {
var $targetId = $(this.hash),
$targetAnchor = $('[name=' + this.hash.slice(1) + ']');
var $target = $targetId.length ? $targetId : $targetAnchor.length ? $targetAnchor : false;
if ($target) {
$(this).click(function () {
//Hack collapse top navigation after clicking
topMenu.parent().attr('style', 'height:0px').removeClass('in'); //Close navigation
$('.navbar .btn-navbar').addClass('collapsed');
var targetOffset = $target.offset().top - 63;
$('html, body').animate({
scrollTop: targetOffset
}, 800);
return false;
});
}
}
});
最佳答案
根据W3C CSS validator您的 CSS 选择器无效:
a[href*=#] {
}
Lexical error at line 1, column 10. Encountered: "]" (93), after : "#" *=] { }
您缺少引号:
a[href*="#"] {
}
它可能停止了 jQuery 迁移,因为较新的版本使用(最快的) native CSS 选择器 (Element.querySelectorAll
),它不能像旧的纯 JavaScript 实现那样容忍错误由 jQuery 提供。
所以尝试一下:
$('a[href*="#"]')
您也可能在其他选择器中遇到类似的错误:
$targetAnchor = $('[name=' + this.hash.slice(1) + ']');
...最好是:
$targetAnchor = $('[name="' + this.hash.slice(1) + '"]');
...并且可能还需要转义 this.hash.slice(1)
,具体取决于它应该包含的内容。
同样,这个:
[href='#'portfolio]
...应该是:
[href='#portfolio']
您需要找到生成它的代码段并修复语法。
绝对所有指向 CSS 选择器的语法错误、无法识别的表达式错误都有相同的原因(无效的选择器)和修复(正确的选择器语法)。
关于javascript - 当我在 1.7 上替换 jquery 1.12.4 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44824963/