2016-06-02 5 views
1

У меня есть несколько массивов, состоящих из шестнадцатеричных значений и URL-адресов изображений.Javascript -> Uncaught TypeError: Не удалось выполнить 'appendChild' в 'Node'

var envelope_colors_array = [ 
      '#feebe4', 
      '#abd076', 
      '#b8d9d5'... 

var metallic_envelope_spans_array = [ 
      'color 1', 
      'color 2', 
      'color 3'... 

var envelope_img_src_array = [ 
      '/images/envelopes/envelope.png', 
      '/images/envelopes/envelope.png', 
      '/images/envelopes/envelope.png'... 

С этим я пытаюсь создать дивы, каждый с уникальным ребенком IMG элемента и двускатной элемента Sibling к DIV. Затем каждый из этих div и интервалов должен быть добавлен к элементу элемента списка.

var metallic_envelope_images_array = metallic_envelope_img_src_array.map(function(img_src, index, metallic_envelope_img_src_array) { 
     var metallic_envelope_image = document.createElement('IMG'); 
     metallic_envelope_image.style.width = '100px'; 
     metallic_envelope_image.style.height = '74px'; 
     metallic_envelope_image.onload = function(){ 
      metallic_envelope_image.src = metallic_envelope_img_src_array[index]; 
     } 
     return metallic_envelope_image; 
     }); 


     var metallic_envelope_divs_array = metallic_envelope_colors_array.map(function(color, index, metallic_envelope_colors_array) { 
     var metallic_envelope_div = document.createElement('DIV'); 
     metallic_envelope_div.style.width = '100px'; 
     metallic_envelope_div.style.height = '74px'; 
     metallic_envelope_div.style.backgroundColor = metallic_envelope_colors_array[index]; 
     return metallic_envelope_div; 
     }); 


     var metallic_envelope_chart_spans_array = metallic_envelope_spans_array.map(function(span, index, metallic_envelope_spans_array){ 
     var metallic_envelope_span = document.createElement('SPAN'); 
     metallic_envelope_span.style.display = 'block'; 
     metallic_envelope_span.style.textAlign = 'center'; 
     var metallic_envelope_span_text_node = document.createTextNode(metallic_envelope_spans_array[index]); 
     metallic_envelope_span.appendChild(metallic_envelope_span_text_node); 
     return metallic_envelope_span; 
     }); 


     var metallic_envelope_chart_divs_with_images_array = metallic_envelope_divs_array.map(function(div, index, metallic_envelope_divs_array){ 
     var metallic_envelope_div_with_image = metallic_envelope_divs_array[index].appendChild(metallic_envelope_images_array[index]); 
     return metallic_envelope_div_with_image; 
     }); 
     console.log("metallic_envelope_chart_divs_with_images_array: " + metallic_envelope_chart_divs_with_images_array); 

     var metallic_envelope_chart_list_items = metallic_envelope_chart_divs_with_images_array.map(function(div_with_image, index, metallic_envelope_chart_divs_with_images_array){ 
     var metallic_envelope_li = document.createElement('LI'); 
     metallic_envelope_li.style.width = '100px'; 
     metallic_envelope_li.style.height = '74px'; 
     metallic_envelope_li.style.marginRight = '40px'; 
     metallic_envelope_li.style.display = 'inline-block'; 
     metallic_envelope_li.style.listStyleType = "none"; 
     metallic_envelope_li.appendChild(metallic_envelope_chart_divs_with_images_array[index]); 
     metallic_envelope_li.appendChild(metallic_envelope_chart_spans_array[index]); 
     return metallic_envelope_li; 
     }); 

К сожалению, когда элемент списка элемент пытается добавить элемент DIV, я получаю следующее сообщение об ошибке:

«Uncaught TypeError: Не удалось выполнить„AppendChild“на„Node“: Параметр 1 не типа «Узел».

Любая помощь очень ценится!

+0

Подробнее о '.map', поэтому вам не нужно использовать IIFE и циклы: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map. –

+0

просто дикая догадка: это не 'envelope_divs_with_images [i]'? Поскольку я считаю, что 'envelope_chart_divs_with_images_array' является функциональной переменной, возможно, я ошибаюсь. –

+0

Спасибо вам за помощь. Феликс, я переписал все, используя карту, но получил ту же ошибку, только теперь она, по-видимому, дальше вниз по детской линии. Спасибо, в любом случае. –

ответ

0

Я не вижу никаких проблем здесь код работает, если вы исправите, что индексы начинаются с 0. Посмотрите на codepen и откройте консоль и введите envelope_chart_list_items[0]. Он работает как минимум на Сафари. Также цикл for..in не предназначен для коллекций (он выполняет итерацию через свойства), что могло вызвать проблемы для вас. По возможности используйте for..of от ES2015.