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

Sizzle


                    Пропустите это  раздел, и вернитесь к нему тогда, когда вас заинтересует, как

                    происходит поиск элементов внутри «$»



             В качестве «поисковика» по элементам DOM'а jQuery использует библиотеку Sizzle. Данная
             библиотека  одно  время  была  неотъемлемой  частью  jQuery,  затем  «отпочковалась»  в

             отдельный  проект,  который  с  радостью  использует  как  сам  jQuery,  так  и  Dojo  Toolkit.  Но

             хватит  лирики,  давайте  перейдем  непосредственно  к  поиску,  для  оного  в  JavaScript'е
             предусмотрены следующие методы (не в jQuery, не в Sizzle, в JavaScript'е):



                    getElementById(id) – поиск по id="…"

                    getElementsByName(name) – поиск по name="name" и id="name"

                    getElementsByClassName(class) – поиск по class="class"
                    getElementsByTagName(tag) – поиск по тегу

                    querySelectorAll(selector) – поиск по произвольному CSS селектору


             Пробежавшись беглым взглядом по списку, можно заметить метод  querySelectorAll()  –

             он  универсален  и  действительно  удобен,  да,  именно  этот  метод  фреймворк  пытается

             дёрнуть,  когда  вы  скармливаете  что-то  в  качестве  селектора  в  jQuery,  но  данный  метод

             иногда  нас  подводит,  и  тогда  на  сцену  выходит  Sizzle  во  всей  красе,  вооруженный  всеми

             упомянутыми методами, да еще со своим уникальным арсеналом:



             if (document.querySelectorAll) (function(){
                    var oldSelect = select
                    /* ... */
                    select = function( selector, context, results, seed, xml ) {

                           // используем querySelectorAll когда нет фильтров в запросе,
                           // когда это запрос не по xml объекту,
                           // и когда не обнаружено проблем с запросом
                           // еще есть пару проверок, которые я опустил для наглядности

                           try {
                                  push.apply(
                                         results,

                                         slice.call(context.querySelectorAll( selector ), 0)


                                                                                                         32


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