Page 293 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 293

>
       class="code" >#content</span )
                      являются  уникальными  ( о ни  должны  использоваться  н а   странице
                      только  ОДИН  раз )  . < /р>
                  <р>Имена  классов  ( н апример,  <span  class="cod " > . callout</span> )
                                                             e
                      могут  использоваться  во  многих  элементах . < /р>
                  <div  i d = " c allout "   class="callout  fancy">
                                  2
                      <р>Одному  НТМL-элементу  можно  присвоить  несколько  классов . </р>
                  < / div>
               </div>
           </body>
       </html>
          У  каждого узла есть свойства nodeType и  nodeName  (среди других). Свойство
       nodeType  - это целочисленный идентификатор типа узла. Объект Node содержит
       константы, которые соответствуют этим числам. В этой главе мы прежде всего будем
       иметь дело с узлами типов Node . ELEMENT _NODE (НТМL-элементы) и Node . ТЕХТ _ NODE
       (текстовое содержимое, которое обычно находится в НТМL-элементах). Более под­
       робная информация по этой теме приведена в части  nodeTy p e документации MDN
                                                      I
       (https : / / d eveloper . m o z i l l a . org/ru/docs/WeЬ/AP / Node/nodeType).
          Ниже приведено хорошее упражнение по написанию функции, которая обходит
       (traverse) все дерево DOM и выводит его на консоль, начиная с document.
       function  printDOM ( n ode ,  prefix)  {
                 e
                                           e
           consol . log (prefix  +  node . nodeNam ) ;
           for ( l et  i=O ;  i<node . childNodes . length;  i++)  {
               printDOM ( n ode . childNodes [ i ] ,  prefix  +  ' \ t  ' )  ;

       printDOM ( d ocument ,  '  '  )  ;
          Эта рекурсивная функция осуществляет обход дерева в глубину в прямом порядке
       (depth-first, pre-order traversal). Таким образом, она следует вниз по всей ветви, преж­
       де чем перейти к следующей ветви. Если вы запустите этот пример в браузере с за­
       груженной страницей, то увидите на консоли всю структуру страницы.
          Хотя это упражнение поучительно, такой способ манипулирования НТМL-кодом
       (подразумевающий необходимость обойти все дерево DOM для нахождения искомо­
       го узла) был бы утомителен и неэффективен. К счастью, DOM предоставляет более
       эффективные методы поиска НТМL-элементов.

                  Хотя  написание  собственной  функции  обхода  дерева  является  хо­
                  рошим упражнением, API DOM предоставляют объект TreeWa k er,
                                                                            l
                  который  позволяет  перебрать  все  элементы  DOM  (с  опциональ­
                  ной  фильтрацией  по  элементам  определенных  типов).  Более  по­
                  дробная  информация  по  этой  теме  приведена  в  части  document .
                  createTreeWa k er документации MDN.
                              l

       296     Глава 1 8 . JavaScript в браузере
   288   289   290   291   292   293   294   295   296   297   298