javascript - DOMException:无法在“文档”上执行“querySelector”:
问题描述
我正在做一个项目,我开始在 bootstrap 4.3.1 上构建。
我对这个 Javascript 和 html 编码很着迷。
<a class="dropdown-item" href="{{ route('user.panel') }}">
User panel
</a>
我在控制台中收到此错误。
SyntaxError: ' http://localhost:8000/user/panel ' 不是一个有效的选择器
bootstrap.min.js:6 未捕获的 DOMException:无法在“文档”上执行“querySelector”:“ http://localhost:8000/user/panel ”不是有效的选择器。在 Object.getSelectorFromElement ( http://localhost:8000/themes/js/bootstrap.min.js:6:1466 ) 在http://localhost:8000/themes/js/bootstrap.min.js:6:46766 在Array.map () 在 ntrefresh ( http://localhost:8000/themes/js/bootstrap.min.js:6:46740 ) 在 new n ( http://localhost:8000/themes/js/bootstrap.min 。 js:6:46381 )
我发现它是由于下拉菜单而发生的,因为这个错误下拉菜单不起作用。我还检查了,如果我使用的是 href="javascript:void(0);", href="#!" 发生错误,但如果我使用没有 href 或 href="#" 的锚标记,那么它工作正常。
注意:我需要带有 href="javascript:void(0); 的解决方案;因为地址链接中的 href="# 看起来不漂亮,并且页面向上滚动到顶部。
<ul class="navbar-nav">
@guest
<li class="navbar-item dropdown">
<a href="#" class="nav-link" data-toggle="dropdown">Register/Login<i class="fas fa-sort-down"></i></a>
<div class="dropdown-menu text-right m-2 position-absolute" style="width:300px;left:-111px;">
<a href="{{ route('login') }}" class="btn btn-primary d-block m-3">Login</a>
<span class="m-3">Are you new user?<a href="{{ route('register') }}" class="link-sign">Login</a></span>
</div>
</li>
@else
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
{{ Auth::user()->first_name }} {{ Auth::user()->last_name }} <span class="caret"></span>
</a>
<div class="dropdown-menu dropdown-menu-left" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{{ route('user.panel') }}">
User Panel
</a>
<a class="dropdown-item" href="#" id="logout-button">
{{ __('Logout') }}
</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
@csrf
</form>
</div>
</li>
@endguest
</ul>
错误出现在以下行中。
$('body').scrollspy({
target: '#mainNav',
offset: 50
});
脚本.js
(function($) {
"use strict"; // Start of use strict
// Smooth scrolling using jQuery easing
$('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function() {
if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
if (target.length) {
$('html, body').animate({
scrollTop: (target.offset().top - 54)
}, 1000, "easeInOutExpo");
return false;
}
}
});
// Closes responsive menu when a scroll trigger link is clicked
$('.js-scroll-trigger').click(function() {
$('.navbar-collapse').collapse('hide');
});
// Activate scrollspy to add active class to navbar items on scroll
$('body').scrollspy({
target: '#mainNav',
offset: 50
});
})(jQuery); // End of use strict
AOS.init({
easing: 'ease-in-out-sine'
});
$('#logout-button').on('click', function(e) {
e.preventDefault();
$('#logout-form').submit();
});
$('#select').change(function() {
var $selected = $(this).find(':selected');
$('#description').html($selected.data('description'));
}).trigger('change');
$("#select").change(function() {
var color = $(this).val();
if (color == "laptop_repair") {
$(".box").not(".laptop_repair").hide();
$(".laptop_repair").show();
} else if (color == "install_windows") {
$(".box").not(".install_windows").hide();
$(".install_windows").show();
} else if (color == "backup") {
$(".box").not(".backup").hide();
$(".backup").show();
} else if (color == "antivirus") {
$(".box").not(".antivirus").hide();
$(".antivirus").show();
} else if (color == "magenta") {
$(".box").not(".magenta").hide();
$(".magenta").show();
} else {
$(".box").hide();
}
});
getSelectorFromElement: function getSelectorFromElement(element) {
var selector = element.getAttribute('data-target');
if (!selector || selector === '#') {
var hrefAttr = element.getAttribute('href');
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
}
return selector && document.querySelector(selector) ? selector : null;
}
解决方案
该错误来自 Bootstrap 的scrollspy组件,该组件明确指出:
Anchors () 是必需的,并且必须指向具有该 id 的元素。
或者
导航栏链接必须具有可解析的 id 目标。例如,a
<a href="#home">home</a>
必须对应 DOM 中的某些内容,例如<div id="home">
.
你有几个解决方案:
将 scrollspy 目标从
#mainNav
更窄的内容更改为不包括.navbar-nav
如果您想跟踪/监视 . 中的链接
.navbar-nav
,则需要破解 scrollspy 源或使用其他一些组件保持一切原样,但在锚点中使用有效的本地链接。
推荐阅读
- java - 使用每个节点到达端点的寻路算法
- docker - 如何在容器内引用非 docker IP 地址?
- javascript - 如何从文字对象数组中删除元素
- c# - ASP.NET Core 2.1 CookieAuthentication 会话超时
- java - 未能执行目标 org.codehaus.mojo:exec-maven-plugin:1.2.1:exec (default-cli) (netbeans)
- python - 无法使用 Beautiful Soup 下载所有图像
- c# - Unity 文本事件在编辑器中触发,但在构建中不触发
- postgresql - 为什么这些 SQL 表达式中的时区没有变化?
- angular - 你能在 Angular 中禁用辅助/辅助路由吗?
- image - SharePoint 365 将图像链接到电子邮件模板