Неперехваченная ошибка типа: Не удается прочитать свойства неопределенного (чтение «родительского кода»)

#javascript #html

#язык JavaScript #HTML

Вопрос:

Я добавил следующий сценарий на свою веб-страницу, где может выполняться действие по регистрации на рассылку новостей. Я пытаюсь отобразить некоторый пользовательский контент после того, как пользователь подпишется.

 lt;scriptgt;  function insertAfter(referenceNode, newNode) {  referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); }   var news = document.getElementsByClassName("et_pb_newsletter_success")[0].selectedIndex;  var text = document.createTextNode("Thank you for joining our SOS Family! We are very grateful to have you with us. Thanks to compassionate people like you, SOS is meeting needs and improving the lives of our friends and neighbours in District 69. You can expect valuable emails from us on a regular basis, and you can unsubscribe at any time.");  var learn = document.createTextNode("Learn more about SOS.")  insertAfter(news,text);  insertAfter(text,learn);    var img = document.createElement("img");  img.src = "https://sosd69.com/wp-content/uploads/newsletter_success.jpeg";    insertAfter(learn,img);   let btn = document.createElement("button");  btn.innerHTML = "Watch Video";  btn.onclick = function () {  window.location='https://www.youtube.com/watch?v=OcYyhazCiHs';  };  btn.classList.add("et_pb_button_0");  insertAfter(img,btn); lt;/scriptgt;  

Я получаю следующую ошибку консоли:

 Uncaught TypeError: Cannot read properties of undefined (reading 'parentNode')  at insertAfter ((index):666)  at (index):672  

Есть ли ошибка в том, как я создал функцию insertAfter? Возможно, проблема в том, что скрипт загружается до создания класса «et_pb_newsletter_success» при нажатии кнопки «подписаться». Любое понимание будет высоко оценено!

Комментарии:

1. Помимо gEBCN проблемы, с которой ответчики справились ниже, есть логическая ошибка, недавно созданные текстовые узлы еще не вставлены ни в один элемент, следовательно, у них не может быть родительского узла.

2. Спасибо! Как бы я в этом случае добавил вновь созданные текстовые коды к элементам в классе et_pb_newsletter_success?

Ответ №1:

getElementsByClassName — дает массив, поэтому вам нужно получить элементы из этого массива и использовать его.

 var news = document.getElementsByClassName("et_pb_newsletter_success")[0];  

Комментарии:

1. Прости! Похоже, что код, который я опубликовал, не был обновлен, но у меня есть эта строка, индексирующая HTML-массив. Ошибка все равно происходит, несмотря ни на что. Я отредактировал вопрос, чтобы показать обновленный код.

2. Что это за выбранный индекс? у него нет такого свойства, поэтому он терпит неудачу. Поставьте отладчик и проверьте, какие значения вы передаете в insertAfter(). Я думаю, это сработает, если вы удалите «.SelectedIndex».

3. Удаление .SelectedIndex приводит к: Uncaught DOMException: Failed to execute 'appendChild' on 'Node': This node type does not support this method. at HTMLDocument.lt;anonymousgt; (https://sosd69.com/contact-sos/:670:10) at e (https://sosd69.com/wp-includes/js/jquery/jquery.min.js?ver=3.6.0:2:30038) at t (https://sosd69.com/wp-includes/js/jquery/jquery.min.js?ver=3.6.0:2:30340)

4. Попробуйте добавить свой код в codepen/jsfiddle/etc и опубликуйте его в своем вопросе. Тогда нам было бы легко вам помочь.