iOS上的forEach无效

问题描述 投票:0回答:2

我有一个函数,允许我根据其体类在特定页面中加载特定模块。出于某种原因,我的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);
        }
    }
}

非常感谢! :)

javascript ios loops foreach safari
2个回答
2
投票

类列表不是数组,它是一个对象。

您可以做的是使用Array.from()将其转换为数组:

Array.from(document.getElementsByTagName("body")[0].classList).forEach(i => console.log(i))

0
投票

Array.from很好,但是为了保存创建数组,你可以使用for of,这可以节省创建一个额外的数组。

for of的另一个重大胜利是,当你开始做很多async代码,你可以使用awaitfor of,但不幸的是没有async forEach ..(还)..

for (const e of document.getElementsByTagName("div")[0].classList) console.log(e);
<div class="one two three"></div>
© www.soinside.com 2019 - 2024. All rights reserved.