современные браузеры добавили 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)/) )
, Пока возможно записать JavaScript непосредственно в атрибутах события HTML (такой как [1 115]) этому не рекомендуют поведения. Особенно на объемных приложениях, больше удобного в сопровождении кода достигается путем разделения разметки HTML от логики взаимодействия JavaScript.
первый шаг к достижению этого путем создания функции и вызывания функции в атрибуте onclick, например:
...
(Это не требуется, чтобы иметь этот код в тегах script, это просто для краткости примера, и включая JavaScript в отличном файле может быть более соответствующим.)
второй шаг должен переместить onclick событие из HTML и в JavaScript, например, с помощью [1 122] addEventListener
...
(Обратите внимание, что window.onload часть требуется так, чтобы содержание той функции было выполнено после , HTML закончил загружаться - без этого, MyElement не мог бы существовать, когда код JavaScript называют, так, чтобы строка перестала бы работать.)
вышеупомянутый код - все в стандартном JavaScript, однако это - общая практика для использования или платформы или библиотеки для упрощения общих задач, а также преимущества от исправленных ошибок и пограничных случаев, о которых Вы не могли бы думать при записи кода.
, Пока некоторые люди считают его излишеством для добавления ~50 платформа КБ для того, чтобы просто изменить класс при выполнении какого-либо значительного количества работы JavaScript, или что-либо, что могло бы иметь необычное поведение перекрестного браузера, это определенно стоит рассмотреть.
(Очень примерно, библиотека является рядом инструментов, разработанных для определенной задачи, пока платформа обычно содержит несколько библиотек и выполняет полный набор обязанностей.)
примеры выше были воспроизведены ниже использования jQuery, вероятно, библиотека JavaScript, которой обычно пользуются (хотя существуют другие, которых стоит исследовать также).
(Отмечают, что $
вот объект jQuery.)
$('#MyElement').addClass('MyClass');
$('#MyElement').removeClass('MyClass');
if ( $('#MyElement').hasClass('MyClass') )
, Кроме того, jQuery обеспечивает ярлык для добавления класса, если это не применяется, или удаление класса, который делает:
$('#MyElement').toggleClass('MyClass');
$('#MyElement').click(changeClass);
или, не нуждаясь в идентификаторе:
$(':button:contains(My Button)').click(changeClass);
Очень простое решение - PStore из стандартной библиотеки Ruby. Он должен соответствовать почти всем вашим требованиям:
Пример:
Вставьте данные в магазин:
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
Подробнее в этом сообщении блога
Похоже, вам нужен Berkeley DB . Он выполняет все, что вы указали, кроме map / reduce.