2015-08-13 3 views
0

Я запускаю узел с cheerio. У меня есть эта функция, которая должна отображать значение атрибута элемента, содержащегося в массиве.«Undefined Is not A Function» при использовании массивов в NodeJS

for (var row = 0; row < array.length; row++) { 
 
    console.log("Row Length: " + array[row].length); 
 
    for (var col = 0; col < array[row].length; col++) { 
 
     console.log("Inside:"); 
 
     console.log(array[row][col].getAttribute('val'));   
 
    } 
 
}

Мой массив содержит элементы списка заселенных с помощью push

array.push($('[title!="CATA"][collection="items"]'));

я получаю желаемый результат для 'длины строк', и он показывает «Inside ', но затем отображает' TypeError: undefined не является функцией ». Я также пытался использовать .attr ('val'), но с той же ошибкой.

Выполнение console.log (array [row] [col]) дает мне следующее.

{ type: 'tag', 
 
    name: 'li', 
 
    attribs: 
 
    { id: 'Amber', 
 
    collection: 'items', 
 
    title: 'disk', 
 
    val: '10|9|2|10|7|13|2|10|12|2|2|5|3|3|5|2|8|7|5|10|4|6|6|3|4|6|2|8|11|2|10|7|9|9|10|8' }, 
 
    children: 
 
    [ { data: 'disk : 10|9|2|10|7|13|2|10|12|2|2|5|3|3|5|2|8|7|5|10|4|6|6|3|4|6|2|8|11|2|10|7|9|9|10|8', 
 
     type: 'text', 
 
     next: null, 
 
     prev: null, 
 
     parent: [Circular] } ], 
 
    next: 
 
    { type: 'tag', 
 
    name: 'li', 
 
    attribs: 
 
     { id: 'Amber', 
 
     collection: 'items', 
 
     title: 'usb', 
 
     val: '3|3|2|4|2|4|3|3|3|13|5|13|2|13|2|5|5|3|4|3|6|3|2|2|5|13|2|3|2|13|2|13|2|2|13|4' }, 
 
    children: [ [Object] ], 
 
    next: 
 
    . 
 
    . 
 
    .

Все, что я пытаюсь сделать, это получить доступ к 'Вэл'.

+0

ли вы напечатать массив [0] [0] элемент? Вы являетесь экспериментальным элементом HTML, но я сомневался в том, что массив не содержит HTML-элемент в индексе [0] [0]. – venkat7668

ответ

1

Я думаю, что ошибка производится с помощью этой линии

console.log(array[row][col].getAttribute('val')); 

Вы звоните .getAttribute на не-объект. Дайте полный список.

+0

Я ценю ваше предложение. Я пытаюсь заставить JQuery-код работать на узле с cheerio. Я понимаю, что cheerio и JQuery разные, но мне нужна помощь в доступе к атрибуту элемента, хранящегося в массиве. – NeelDeveloper

+0

@NeelDeveloper Вам нужно будет предоставить некоторый пример кода HTML и то, что вы хотите, чтобы ваш селектор действительно выбирал, если это то, что вам нужно. –

0

Одно или несколько значений в вашем массиве: undefined, а при звонке getAttribute на него выдается ошибка TypeError: undefined is not a function. Чтобы отладить этот просмотр данных внутри массива, используйте console.log(array) или используя отладчик. В конечном счете функция jQuery заполняет массив не назначенными переменными, поэтому просмотрите селектор и посмотрите, делает ли он то, что вы ожидаете.

0

Во-первых, печать более полезным сообщение:

if (!array[row][col] || !(array[row][col].getAttribute)) { 
    console.log(row, col, array[row][col]); 
} 

Теперь посмотрим на консоли, и вы увидите, индексы, для которых ваш массив не заполнены с видами объектов, которые вы ожидаете, а также тех, объекты.