0

Привет всем, мне нужно узнать все имена предметов, которые находят в атрибуте, а в самом атрибуте еще и находятся в html.

Так как предметов много, то мой скрипт должен просканировать все, и выполнить определенный код, но доходя до определенного места он выдает ошибку, ПОМОГИТЕ

Для 1 елемента роботает для многих нет.
для 1 елемента
для n елементов

var char = "uniq",
    block = $(".skinsContainer.skinsContainer-v2 > .skinsItems"),
    jsonCode = "$.parseHTML($(this).find('.skinInfo').attr('data-content'))[0].innerHTML.trim()";

function name() {
    $(block).each(function () {
        var my = type($(this));
        console.log(my);
    });
}

function type() {
    if (char == "attr") {
        console.log('1');
    } else {
        if (char == "html") {
            console.log('2');
        } else {
            console.log('3');
            return eval(jsonCode);
        }
    }
    return undefined;
}

name();

Смотрите консоль.

Ошибка: Uncaught TypeError: Cannot read property 'innerHTML' of undefined

  • $(cond) возвращает массив элементов в вашем случае innerHTML не взаимодействует с коллекциями а только с одним элементом. Вместо этого используй html() –  Sep 19 '17 at 17:34

1 Answers1

0

Вы передаете в функцию type() параметр $(this), но эта функция не ждет параметров ...

var char = "uniq",
    block = $(".skinsContainer.skinsContainer-v2 > .skinsItems"),
    jsonCode = "$.parseHTML($elem.find('.skinInfo').attr('data-content'))[0].innerHTML.trim()"; // Тут соответственно меняем $(this) на $elem
function name() {
    $(block).each(function () {
        var my = type($(this));
        console.log(my);
    });
}

function type($elem) { // Функция должна принимать параметр, раз уж он в неё передается
    if (char == "attr") {
        console.log('1');
    } else {
        if (char == "html") {
            console.log('2');
        } else {
            console.log('3');
            return eval(jsonCode);
        }
    }
    return undefined;
}
name();
MedvedevDev
  • 5,237