Page 33 - jQuery для начинающих
P. 33

);
                                  return results;

                           } catch(qsaError) { /* подвёл, опять, ну сколько можно */ }
                           /* ... */
                           // выход Sizzle
                           return oldSelect( selector, context, results, seed, xml );

                    };


             Но  давайте  уже  рассмотрим,  как  Sizzle  ищет  в  DOM'е,  если  таки  метод  querySelectorAll

             споткнулся. Начнём с разбора алгоритма работы на следующем примере:



                           $("thead > .active, tbody > .active")


                1.  Получить первое выражение до запятой: «thead > .active»

                2.  Разбить на кусочки: «thead», «>», «.active»
                3.  Найти исходное множество элементов по последнему кусочку (все «.active»)

                4.  Фильтровать  справа  налево  (все  «.active»  которые  находятся  непосредственно  в

                    «thead»)

                5.  Искать следующий запрос после запятой (возвращаемся к первому пункту)
                6.  Оставить только уникальные элементы в результате



             Глядя на данный алгоритм вы должны заметить, что правила читаются справа на лево!



             Копаем глубже. При анализе даже самого маленького выражения есть несколько нюансов
             на  которые  стоит обратить  внимание  –  первый  –  это  приоритет  поиска,  он различен  для
             различных браузеров (в зависимости от их возможностей, или «невозможностей»):


                    order: new RegExp( "ID|TAG" +

                           (assertUsableName ? "|NAME" : "") +
                           (assertUsableClassName ? "|CLASS" : "")
                    )


                    Не обращайте внимание на RegExp – это внутренняя кухня Sizzle







                                                                                                         33


                                                                                        www.trk.kg
   28   29   30   31   32   33   34   35   36   37   38