将 jQuery 脚本转换为 bootstrap 在 iframe 顶部折叠导航栏下拉列表的计划 JS
Convert jQuery Script to plan JS for bootstrap nav bar drop down collapse on top of iframe
我正在尝试将 jQuery 脚本转换为纯 JS。这个脚本是为了解决我的网站上的一个问题,我有一个带有下拉菜单的导航栏,屏幕的其余部分有一个 iframe
。
如果没有此脚本,单击 iframe
中的任何位置时,下拉菜单不会折叠。 jQuery 有效,但我无法让 JS 正常工作并且对 JS 了解不多
$(window).on("blur", function() {
$(".dropdown").removeClass("show"),
$(".dropdown-menu").removeClass("show"),
$(".dropdown-toggle").attr("aria-expanded", !1).focus()
});
window.blur(),
document.getElementsByClassName('dropdown').classList.remove('show'),
document.getElementsByClassName('dropdown-menu').classList.remove('show'),
document.getElementsByClassName('dropdown-toggle').getAttribute("aria-expanded", !1).focus;
您没有提供html,所以回答这个问题并不容易。
ES6 方式
window.onblur = () => {
const
removeClass = (el, className) => el.classList.remove(className),
dropdowns = document.getElementsByClassName('dropdown'),
menus = document.getElementsByClassName('dropdown-menu'),
togglers = document.getElementsByClassName('dropdown-toggle')
for (const d of dropdowns) removeClass(d, 'show')
for (const m of menus) removeClass(m, 'show')
for (const t of togglers) t.getAttribute('aria-expanded', false).focus
}
.dropdown {
display: none;
}
.dropdown.show {
display: initial;
}
.dropdown-menu {
display: none;
}
.dropdown-menu.show {
display: initial;
}
<div class="dropdown-toggle" aria-expanded="true">
toggler
</div>
<div class="dropdown show">
<div class="dropdown-menu show">
menu
</div>
</div>
老办法
window.onblur = function () {
function removeClass(el, className) {
el.classList.remove(className)
}
// When calling `getElementsByClassName, you get collection of elements
// So you can't call `classList` method on it
var dropdowns = document.getElementsByClassName('dropdown')
var menus = document.getElementsByClassName('dropdown-menu')
var togglers = document.getElementsByClassName('dropdown-toggle')
// You have to iterate over found elements
for (var i = 0; i < dropdowns.length; i++) removeClass(dropdowns[i], 'show')
for (var i = 0; i < menus.length; i++) removeClass(menus[i], 'show')
for (var i = 0; i < togglers.length; i++) togglers[i].getAttribute('aria-expanded', false).focus
}
我正在尝试将 jQuery 脚本转换为纯 JS。这个脚本是为了解决我的网站上的一个问题,我有一个带有下拉菜单的导航栏,屏幕的其余部分有一个 iframe
。
如果没有此脚本,单击 iframe
中的任何位置时,下拉菜单不会折叠。 jQuery 有效,但我无法让 JS 正常工作并且对 JS 了解不多
$(window).on("blur", function() {
$(".dropdown").removeClass("show"),
$(".dropdown-menu").removeClass("show"),
$(".dropdown-toggle").attr("aria-expanded", !1).focus()
});
window.blur(),
document.getElementsByClassName('dropdown').classList.remove('show'),
document.getElementsByClassName('dropdown-menu').classList.remove('show'),
document.getElementsByClassName('dropdown-toggle').getAttribute("aria-expanded", !1).focus;
您没有提供html,所以回答这个问题并不容易。
ES6 方式
window.onblur = () => {
const
removeClass = (el, className) => el.classList.remove(className),
dropdowns = document.getElementsByClassName('dropdown'),
menus = document.getElementsByClassName('dropdown-menu'),
togglers = document.getElementsByClassName('dropdown-toggle')
for (const d of dropdowns) removeClass(d, 'show')
for (const m of menus) removeClass(m, 'show')
for (const t of togglers) t.getAttribute('aria-expanded', false).focus
}
.dropdown {
display: none;
}
.dropdown.show {
display: initial;
}
.dropdown-menu {
display: none;
}
.dropdown-menu.show {
display: initial;
}
<div class="dropdown-toggle" aria-expanded="true">
toggler
</div>
<div class="dropdown show">
<div class="dropdown-menu show">
menu
</div>
</div>
老办法
window.onblur = function () {
function removeClass(el, className) {
el.classList.remove(className)
}
// When calling `getElementsByClassName, you get collection of elements
// So you can't call `classList` method on it
var dropdowns = document.getElementsByClassName('dropdown')
var menus = document.getElementsByClassName('dropdown-menu')
var togglers = document.getElementsByClassName('dropdown-toggle')
// You have to iterate over found elements
for (var i = 0; i < dropdowns.length; i++) removeClass(dropdowns[i], 'show')
for (var i = 0; i < menus.length; i++) removeClass(menus[i], 'show')
for (var i = 0; i < togglers.length; i++) togglers[i].getAttribute('aria-expanded', false).focus
}