Javascript.RU

js-core JavaScript framework

js-core logoХочу рассказать Вам о своём JavaScript-фреймворке.

js-core разрабатывался с целью создать быструю и лёгкую JavaScript-библиотеку для кросс-браузерной работы с DOM, CSS и AJAX, обладающую минимальным и достаточным функционалом.

Фреймворк спроектирован так, чтобы не вызывать конфликтов с другими скриптами и библиотеками. Не затрагивает ни один из встроенных объектов.

  • Internet Explorer 6+
  • Mozilla Firefox 2+
  • Opera 9.2+
  • Safari 3+
  • Google Chrome

Доступ ко всем методам фреймворка возможен через глобальную функцию-объект core или короткую ссылку $. Если вы уже используете функцию с именем $ и создали её до подключения js-core, то ваша функция не будет перезаписана и воспользоваться средствами фреймворка будет возможно только по ссылке core, тогда, чтобы пользоваться ссылкой $, как функцией фреймворка js-core, достаточно весь код заключить в следующую обёртку:

(function($) {
    $(…) // – функция фреймворка js-core
})(core);

Фунция $, так же являясь объектом, имеет набор методов и свойств:

$(…) // используем $, как функцию
$.method(…) // используем $, как объект

Функция $ принимает в качестве агрумента строку с именем идентификатора элемента или ссылку на DOM-элемент:

$('elementID') // найти элемент по идентификатору
$(document.body) // просто создать объект core, для ссылки на элемент body

Ссылка на элемент запоминается в свойство node текущего экземпляра объекта core:

var obj = $(document.body); // → {node: document.body}

Через прототип этого объекта доступен набор методов для работы с node:

obj.hide() // скрыть элемент node
obj.remove() // удалить элемент node
obj.html('string') // заменить node.innerHTML на string

и еще много других методов.

В отличие от других JavaScript framework'ов, в js-core нет механизма поиска элементов с использованием синтаксиса CSS-селекторов. Такой функционал был специально исключен из ядра фреймворка, чтобы уменьшить объём кода и сохранить производительность. В большинстве случаев алгоритм, позволяющий выполнить поиск элементов по CSS-селекторам, является слишком избыточным, а иногда и медленным, большая часть кода остается не востребованной и лежит в проекте «мертвым грузом», так как правильно спроектированные JavaScript-приложения должны в меньшей степени зависеть от вёрстки документа, а значит будет достаточно иметь набор методов, выполняющих поиск элементов по именам тегов, CSS-классов и значениям атрибутов:

$('elementID') // поиск элемента по имени идентификатора
$.tag('h1 h2 h3 h4 h5 h6') // поиск элементов по именам тегов
$.findClass('class1 class2') // поиск элементов по именам CSS-классов
$.find({type: 'submit'}) // поиск элементов по значениям атрибутов

js-core похож на jQuery не только именами методов, но и возможностью строить цепочки из последовательного вызова методов, однако, принцип работы цепочек кардинально отличается.
Рассмотрим на примере пустого документа:

<body></body>

Создадим и выполним похожие цепочки вызовов для jQuery и js-core:

// jQuery
$(document.body).append('<div>').html('text');

// js-core
$(document.body).append('div').html('text');

Казалось бы эти 2 примера, приведенные выше, сделают одно и тоже, но в случае с jQuery получим:

<body>text</body>

Элемент div был создан и тут же перезаписан переданной в метод html строкой, так как работа идет с первым звеном цепочки.

А js-core сделает следующее:

<body>
    <div>text</div>
</body>

Более ожидаемый результат, не так ли? Все потому, что цепочки вызовов в js-core могут изменять контекст вызова, работа идет последовательно.

Допустим есть следующий HTML-код:

<div id="container"></div>

Построим и выполним цепочку вызовов методов для js-core:

$("container")                  // this → HTMLDivElement#container
    .append("fieldset")         // this → HTMLFieldsetElement
        .append("p")            // this → HTMLParagraphElement
            .prepend("span")    // this → HTMLSpanElement
                .text("Пример") // this → HTMLSpanElement

Получим:

<div id="container">
    <fieldset>
       <p>
           <span>Пример</span>
       </p>
    </fieldset>
</div>

Фреймворк js-core, в отличие от jQuery, позволяет различать работу с одним элементом или набором.

// jQuery
$('#elementID').addClass('myClass') // работа с набор элементов,
                                    // хотя элемент с идентификатором
                                    // elementID всего один

// js-core
$('elementID').addClass('myClass') // работа с одним элементом

jQuery запустит механизм, который должен выполнить указанный метод addClass для всего набора элементов, не смотря на то, что в списке всего один узел.

В следующем примере видно, каким образом js-core позволяет выполнить указанный метод для набора элементов:

// jQuery
$('div').addClass('myClass')

// js-core
$.tag('div').each('addClass', 'myClass');

Кода немного больше, но он более наглядный и быстрый.

+3

Автор: porcelanosa, дата: 15 августа, 2008 - 16:36
#permalink

почему не подходил jQuery ?
Не совсем понятны причины побудившие к написанию этого фреймворка!
Могу предположить, что это размер. Но хотелось бы услышать от Вас пояснения.
Спасибо!


Автор: porcelanosa, дата: 15 августа, 2008 - 17:07
#permalink

Изучила код - и вижу, что в общих чертах синтаксис jQuery сохранен - насколько велика совместимость? Т.е. возможно ли использование некоторых плагинов jQuery совместно с данным фреймворком - ну тех где допустим не используется анимация и ajax?
идея сделать типа jQuery simple очень понравилась - т.е. использование для сборки доп. модулей как в mootools - только необходимое. А то 30 килобайт это довольно много уже для некоторых случаев!


Автор: Гость (не зарегистрирован), дата: 18 августа, 2008 - 00:47
#permalink

покажи хоть один плаин, где они не используются ;-)


Автор: Octane, дата: 13 июня, 2009 - 17:13
#permalink
  • Мне не нравится способ определения браузера по строке «navigator.userAgent», как это сделано в «jQuery».
  • «jQuery» слишком ресурсоемкий фреймворк для работы в браузерах мобильных устройств.
  • Еще не нравится в «jQuery» то, что при отсутствии объекта не происходит ошибки, например $('#foo').hide(); не выдаст ошибки, если в документе вообще нет элемента с идентификатором «foo», часто подобные строки остаются забытыми в коде.

Автор: Octane, дата: 15 августа, 2008 - 17:23
#permalink

Нет, расширения «jQuery» не работают с «js-core» и из-за того, что названия большинства методов совпадают, они будут конфликтовать при совместном использовании.


Автор: vflash, дата: 18 августа, 2008 - 13:26
#permalink

jQuery помешательство )


Автор: Гость (не зарегистрирован), дата: 27 сентября, 2008 - 14:55
#permalink

Если есть jQuery, то резон юзать этот фремверк?


Автор: Гость (не зарегистрирован), дата: 27 сентября, 2008 - 14:56
#permalink

"«jQuery» вообще не работает в IE5.5"

Уже Ие 5.5 никто не пользуется, или полюзуютс мамонты....

И вообще пора бы уже перестать использовать этот дырявый браузер.


Автор: Гость (не зарегистрирован), дата: 13 апреля, 2022 - 03:59
#permalink

Автор: Гость (не зарегистрирован), дата: 16 апреля, 2022 - 02:35
#permalink

Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
1 + 4 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Другие записи этого автора
Octane
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Популярные таги
Последние комментарии
Последние темы на форуме
Forum