我有一个函数,允许我根据其体类在特定页面中加载特定模块。出于某种原因,我的forEach功能无法在iOS设备上运行,特别是在safari上。我试图解决这个问题一段时间,我不知道如何前面...使用try / catch,给定的错误是:
TypeError:document.getElementsByTagName(“body”)[0] .classList.forEach不是函数。 (在'document.getElementsByTagName(“body”)[0] .classList.forEach(function(e){var t = e; x.hasOwnProperty(t)&& new x [t]})','document.getElementsByTagName(“ body“)[0] .classList.forEach'未定义)
这是我的代码:
import Header from './Components/Header';
import Shelf from './Components/Shelf';
import Home from './Pages/Home';
import Category from './Pages/Category';
import Product from './Pages/Product';
import NossasLojas from './Pages/NossasLojas';
import Checkout from './Pages/Checkout';
const Routes = {
"home": Home,
"single-product": Product,
"page-template-nossas-lojas": NossasLojas,
"archive": Category,
"woocommerce-cart": Checkout
};
export default class Pages {
constructor(){
new Header();
new Shelf();
try {
document.getElementsByTagName("body")[0].classList.forEach(function(e){
let pageName = e;
if(Routes.hasOwnProperty(pageName)){
new Routes[pageName]();
}
})
}
catch (err) {
alert(err);
}
}
}
非常感谢! :)
类列表不是数组,它是一个对象。
您可以做的是使用Array.from()将其转换为数组:
Array.from(document.getElementsByTagName("body")[0].classList).forEach(i => console.log(i))
Array.from
很好,但是为了保存创建数组,你可以使用for of
,这可以节省创建一个额外的数组。
for of
的另一个重大胜利是,当你开始做很多async
代码,你可以使用await
与for of
,但不幸的是没有async forEach
..(还)..
for (const e of document.getElementsByTagName("div")[0].classList) console.log(e);
<div class="one two three"></div>