Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите исправить код JS

Rinby Ученик (11), закрыт 4 года назад
При обращении к родительскому элементы всё работает, попытался аналогичным образом сделать для дочернего - выдаёт ошибку. Мне говорили, что надо писать цикл, почему такие сильные различия для вроде как однотипных запросов. Скиньте, пожалуйста, скрин работающего кода и объяснительно максимально просто, из-за чего здесь ошибка.
Лучший ответ
Elepsis Eclipse Гений (64071) 4 года назад
Разница есть)) У элемента может быть только один прямой родитель... а дочерних элементов может быть дофига. Поэтому родитель один, а childNodes - массив. Поэтому нужно тыкать на конкретный элемент childNodes, а не на весь массив...

Есть подводный камень... childNodes собирает не только HTML-элементы, но и текстовые узлы. У вас там внутри div два переноса строки (=обычные пробелы), в итоге childNodes выдает массив из трех элементов:

["текстовый узел, 1 пробел", "элемент с id='qw' ", "третий текстовый - пробел"];

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

В вашем варианте кода сработает такая строчка:

sd[1].style.color = "green";

А лучше

var sd = element.children;
sd[0].style.color = "green";

children собирает только HTML-элементы, игнорируя тексты.
RinbyУченик (11) 4 года назад
Спасибо большое, очень подробно и доступно! Теперь многое стало понятней.
Остальные ответы
TerraGruff Мастер (2473) 4 года назад
childnodes - это массив, попробуй написать sd[0].style.color
Похожие вопросы