Встроенный аналог CouchDB, то же как sqlite для SQL Server

Современные Методы HTML5 для изменения классов

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

document.getElementById("MyElement").classList.add('MyClass');

document.getElementById("MyElement").classList.remove('MyClass');

if ( document.getElementById("MyElement").classList.contains('MyClass') )

document.getElementById("MyElement").classList.toggle('MyClass');

, К сожалению, они не работают в Internet Explorer до v10, хотя существует контейнер для добавления поддержки его к IE8 и IE9, доступному от [1 119] эта страница . Это, тем не менее, добирается, все больше поддерживало .

Простое решение

перекрестного браузера стандартный JavaScript способ выбрать элемент использует document.getElementById("Id") , который является тем, что используют следующие примеры - можно, конечно, получить элементы другими способами, и правильной ситуацией может просто использовать this вместо этого - однако, вдавание в подробности об этом выходит за рамки ответа.

Для изменения всех классов для элемента:

Для замены всех существующих классов одним или несколькими новыми классами установите атрибут имени класса:

document.getElementById("MyElement").className = "MyClass";

(Можно использовать разделенный пробелами список для применения нескольких классов.)

Для добавления дополнительного класса к элементу:

Для добавления класса к элементу, не удаляя/влияя существующие значения, добавляют пространство и новое имя класса, как так:

document.getElementById("MyElement").className += " MyClass";

Для удаления класса из элемента:

Для удаления единого класса к элементу, не влияя на другие потенциальные классы, простая замена regex требуется:

document.getElementById("MyElement").className =
   document.getElementById("MyElement").className.replace
      ( /(?:^|\s)MyClass(?!\S)/g , '' )
/* Code wrapped for readability - above is all one statement */

объяснение этого regex следующие:

(?:^|\s) # Match the start of the string, or any single whitespace character

MyClass  # The literal text for the classname to remove

(?!\S)   # Negative lookahead to verify the above is the whole classname
         # Ensures there is no non-space character following
         # (i.e. must be end of string or a space)

Эти g флаг говорит замене повторяться как требуется, в случае, если имя класса было добавлено многократно.

, Чтобы проверить, применяется ли класс уже к элементу:

тот же regex, используемый выше для удаления класса, может также использоваться в качестве проверки относительно того, существует ли конкретный класс:

if ( document.getElementById("MyElement").className.match(/(?:^|\s)MyClass(?!\S)/) )


Присвоение этих действий к onclick событиям:

, Пока возможно записать JavaScript непосредственно в атрибутах события HTML (такой как [1 115]) этому не рекомендуют поведения. Особенно на объемных приложениях, больше удобного в сопровождении кода достигается путем разделения разметки HTML от логики взаимодействия JavaScript.

первый шаг к достижению этого путем создания функции и вызывания функции в атрибуте onclick, например:


...

(Это не требуется, чтобы иметь этот код в тегах script, это просто для краткости примера, и включая JavaScript в отличном файле может быть более соответствующим.)

второй шаг должен переместить onclick событие из HTML и в JavaScript, например, с помощью [1 122] addEventListener


...

(Обратите внимание, что window.onload часть требуется так, чтобы содержание той функции было выполнено после , HTML закончил загружаться - без этого, MyElement не мог бы существовать, когда код JavaScript называют, так, чтобы строка перестала бы работать.)


Платформы JavaScript и Библиотеки

вышеупомянутый код - все в стандартном JavaScript, однако это - общая практика для использования или платформы или библиотеки для упрощения общих задач, а также преимущества от исправленных ошибок и пограничных случаев, о которых Вы не могли бы думать при записи кода.

, Пока некоторые люди считают его излишеством для добавления ~50  платформа КБ для того, чтобы просто изменить класс при выполнении какого-либо значительного количества работы JavaScript, или что-либо, что могло бы иметь необычное поведение перекрестного браузера, это определенно стоит рассмотреть.

(Очень примерно, библиотека является рядом инструментов, разработанных для определенной задачи, пока платформа обычно содержит несколько библиотек и выполняет полный набор обязанностей.)

примеры выше были воспроизведены ниже использования jQuery, вероятно, библиотека JavaScript, которой обычно пользуются (хотя существуют другие, которых стоит исследовать также).

(Отмечают, что $ вот объект jQuery.)

Изменяющиеся Классы с jQuery:

$('#MyElement').addClass('MyClass');

$('#MyElement').removeClass('MyClass');

if ( $('#MyElement').hasClass('MyClass') )

, Кроме того, jQuery обеспечивает ярлык для добавления класса, если это не применяется, или удаление класса, который делает:

$('#MyElement').toggleClass('MyClass');


Присвоение функции к событию щелчка с jQuery:

$('#MyElement').click(changeClass);

или, не нуждаясь в идентификаторе:

$(':button:contains(My Button)').click(changeClass);


5
задан Georg Fritzsche 20 May 2010 в 20:18
поделиться

2 ответа

Очень простое решение - PStore из стандартной библиотеки Ruby. Он должен соответствовать почти всем вашим требованиям:

  1. PStore хранит иерархии объектов Ruby в файлах, поэтому вы можете легко использовать хеш-подобные структуры, которые были бы в CouchDB.
  2. Вы можете получить доступ к содержимому PStore с помощью простого API
  3. У него есть транзакции, но нет версий, насколько я знаю
  4. да
  5. Вы можете использовать Ruby map и inject functions
  6. Все, что вам нужно, это доступ к файловой системе

Пример:

Вставьте данные в магазин:

require 'pstore'
store = PStore.new("/tmp/store")
store.transaction do
  store["products"] = [{:name => "Test", :price => 100}
                       {:name => "Bla", :price => 120}
                       {:name => "Oink", :price => 300}]
end

Запросите сумму цен на все товары:

store.transaction do
  store['products'].map {|p| p[:price]}.inject {|sum, p| sum + p}
end

Подробнее в этом сообщении блога

4
ответ дан 15 December 2019 в 01:08
поделиться

Похоже, вам нужен Berkeley DB . Он выполняет все, что вы указали, кроме map / reduce.

0
ответ дан 15 December 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: