…Внедрил в проект XSLT-шаблоны. Соответственно, кое-где поменялось оформление HTML-кода. Ну, знаете, переносы строк, отступы… И внезапно программный модуль, который срочно понадобился начлабу для демонстрации, заглючил. Мне - требование разобраться и исправить.
Лезу в код, и с грустью вижу, что он не мой, а - юниора. Собственно, вот:
var detailsTable = document.getElementById("detailsTable").tBodies[0];
var childs = [], j=0;
for (var i = 0; i < detailsTable.childNodes.length; i++)
if (detailsTable.childNodes[i].nodeType == 1){
childs[j++] = detailsTable.childNodes[i];
}
childs[0].childNodes[1].innerHTML = ''
(Да, и точки с запятой в конце последней строчки нету.) …Ну и так далее. Я некоторое время не мог понять (ну, написал бы хотя бы detailsTable.childNodes[i].nodeType===detailsTable.childNodes[i].ELEMENT_NODE, яснее было бы; для тех, кто совсем не в курсе: тут отсеиваются дочерние узлы таблицы, которые являются не строками, а пустыми текстовыми узлами, фантомными паразитами, происходящими от оформления HTML-кода вёрстки,- а вот с ячейками строки такой фильтрации не проводится, оттого и глюки пошли…), а потом поверить, что всё это только ради записи в ячейки таблицы (и может быть заменено на: var detailsTableBody=document.getElementById("detailsTable").tBodies[0]; detailsTableBody.rows[0].cells[1].textContent=data[0]["shortname"];).
Вот что значит отрывочность знаний: знать про коллекцию tBodies и CDATA-секции, но не про коллекции rows и cells. И спешка. Я, кажется, никогда не позволял себя так торопить, чтобы выдавать код, написанный настолько «в лоб», без знакомства с предоставляемым языком интерфейсом.
Больше я был впечатлён только несколько лет назад, когда напарник в одной московской фирмочке искал непосредственных потомков DOM-узла таким вот образом (воспроизвожу по памяти):
var z=fggh.getElementsByTagName("*");
for(iii=0; iii
Кстати, о Javascript, но уже не в связи с DOM. Язык продолжает развиваться, становится строже и… э-э-э… more handsome - и это радует.
В январе в проекте ECMAScript 6, в частности, сделали разрушающее присваивание (destructuring) - опровержимым (refutable). Что это значит? Ну, разрушающее присваивание это наподобие конструкции list в PHP - когда мы одной строкой распихиваем поля массива или объекта по нескольким переменным (в том числе и
в сигнатуре функции - реализация именованных аргументов практически). Очень удобный и интуитивно понятный синтаксический сахар.
А теперь этот сахар сделан опровержимым. То есть если в объекте не будет поля с одним из затребованных имён, интерпретатор, умница, выбросит исключение,- но можно прямо и лаконично пометить необязательные поля - или даже все сразу - вопросительным знаком. А можно указать дефолтовое значение по умолчанию.