【发布时间】:2021-09-29 00:13:48
【问题描述】:
我需要将一些 Jquery 重写为本机 JavaScript 代码,但我遇到了一个我不太确定如何解决的问题。
这是我需要用原生 JS 重写的 Jquery 代码:
$('.class1').click(function () {
setTimeout(() => {
$('.class2').css('top', '252px');
$('.class3').css('bottom', '0px');
}, 200);
$('.class2').css('z-index', '-1');
$('.class1').css('z-index', '-1');
});
这是我用原生 JavaScrip 写的:
if (document.querySelector('.class1')){
document.querySelector('.class1').addEventListener('click', function () {
setTimeout(() => {
if (document.querySelector('.class2')) {
document.querySelector('.class2').style.top = '252px';
}
if ( document.querySelector('.class3')) {
document.querySelector('.class3').style.bottom = '0px';
}
}, 200);
if (document.querySelector('.class2')) {
document.querySelector('.class2').style.zIndex = '-1';
}
if ( document.querySelector('.class1')) {
document.querySelector('.class1').style.zIndex = '-1';
}
})
}
我希望人们可以向我解释如何解决两件事:
- 如果代码在整个站点上运行,是否有更优雅的方法来检查当前页面上的元素?
- 还有什么可以替代函数中的 if 语句的吗?
在 Jquery 中,这些语句是一个接一个地执行的,但在我的情况下,我需要先检查一个元素,如果它存在,则对其进行处理。
【问题讨论】:
-
$(selector).css(...)有两个优点:1. 如果没有匹配,则没有错误 2. css 规则适用于每个匹配的元素。document.querySelectorotoh 只返回第一个匹配,所以要重现 (2) 你需要document.querySelectorAll(selector).forEach(el => el.style.top = '252px');这也解决了 (1)
标签: javascript jquery web