forEach на iOS Safari не будет работать - PullRequest
0 голосов
/ 11 мая 2018

У меня есть функция, которая позволяет мне загружать определенные модули на определенных страницах на основе их классов тела.По какой-то причине моя функция 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);
        }
    }
}

Большое спасибо!:)

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

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>
0 голосов
/ 11 мая 2018

Список классов не является массивом, это объект.

Что вы можете сделать, это преобразовать его в массив, используя Array.from () , например:

Array.from(document.getElementsByTagName("body")[0].classList).forEach(i => console.log(i))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...