Я практикую базовые навыки JS, создавая для себя маленькие упражнения. В этом случае у меня есть список <a>
s внутри div. Цель упражнения - обернуть каждый <a>
в div. В этом случае я использую replaceChild
.Понимание «parentNode» неопределенной ошибки
Как ни странно (для меня по крайней мере) скрипт работает в течение первых трех звеньев, но после этого выдает ошибку:
Uncaught TypeError: Cannot read property 'parentNode' of undefined
Я не могу сказать, почему сценарий частично работает. Может ли кто-нибудь увидеть, что я здесь делаю неправильно? Вот код, я использую:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<style media="all">
div div {padding: 10px; background: #e7e7e7; margin: 5px;}
</style>
</head>
<body>
<div>
<a href="">link</a>
<a href="">link</a>
<a href="">link</a>
<a href="">link</a>
<a href="">link</a>
<a href="">link</a>
</div>
<script>
var links = document.getElementsByTagName("a");
for (var i=0, ii=links.length; i<ii; i++)
{
var container = document.createElement("div");
links[i].parentNode.replaceChild(container, links[i]);
container.appendChild(links[i]);
}
</script>
</body>
</html>
и вот онлайн версия: http://codepen.io/anon/pen/Lpuky
Я пробовал несколько методов отладки, которые я знаю и читать об этом сообщении об ошибке, но не работали что здесь не так. Мне кажется смешным, что он работает для 3 из 6 ссылок.
Быстрый совет: 'for (var i = links.length-1; i> = 0; i -)' избегает проблемы. Работа с обратной стороны обычно является хорошей идеей при работе с узлами. –
Да, хорошая точка. Это также появилось в комментариях ниже.:) –