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

Sizzle


             Когда  я  рассказывал  о  Sizzle  я  решил  вас  не  грузить  возможностями  по  расширению
             библиотеки, но вот время настало… В Sizzle можно расширять много чего:

                —  Sizzle.selectors.match
                —  Sizzle.selectors.find
                —  Sizzle.selectors.filter
                —  Sizzle.selectors.attrHandle
                —  Sizzle.selectors.pseudos

             Но браться мы будем лишь за расширение псевдо-селекторов:


                    $("div:animated"); // поиск анимированных элементов

                    $("div:hidden");   // поиск скрытых элементов div
                    $("div:visible");  // поиск видимых элементов div


             Почему  я  привел  только  эти  фильтры?  Всё  просто  —  только  они  не  входят  в  Sizzle,  и
             относятся лишь к jQuery, именно такие плагины мы будем тренироваться разрабатывать.

             Начнем с кода фильтра «:hidden»:


                    // пример для расширения Sizzle внутри jQuery
                    // для расширения самого Sizzle нужен чуть-чуть другой код
                    jQuery.expr.filters.hidden = function( elem ) {

                           // проверяем ширину и высоту каждого элемента в выборке
                           return elem.offsetWidth === 0 || elem.offsetHeight === 0;
                    };


             Выглядит  данный  код  несложно,  но,  пожалуй,  я  таки  дам  каркас  для  нового  фильтра  и
             добавлю чуть-чуть пояснений:

                    $.extend($.expr[':'], {

                           /**
                            * @param element DOM элемент
                            * @param i порядковый номер элемента
                            * @param match объект матчинга регулярного выражения
                            * @param elements массив всех найденных DOM элементов
                            */
                           test: function(element, i, match, elements) {

                                  return true || false; // выносим вердикт
                           }

                    })

                                                                                                        103


                                                                                        www.trk.kg
   98   99   100   101   102   103   104   105   106   107   108