Допустим, у меня есть элемент
<a class="Foo Bar" />
И я хочу добавить дублирующий класс, так как я кодирую это:
$('.Bar').addClass('Foo');
Класс не добавляется, потому что элемент уже имеет один.
Я хочу закодировать что-то вроде этого:
$('.Bar').addClassForcebly('Foo'); // Fake method, only for example.
И я ожидаю следующий результат:
<a class="Foo Bar Foo" />
Я попытался использовать перегрузку метода jQuery addClass
:
$('.Bar').addClass(function(i, c) {
return c + ' Foo';
});
Но это тоже не работает. Он просто не добавляет повторяющийся класс. Как мне это сделать?
Смысл этого вопроса довольно прост: я хочу, чтобы мои HTML-элементы могли быть отключены и активированы много раз. Если я дважды отключу элемент (добавив два одинаковых класса), я должен "включить" его дважды, чтобы моя логика работала.
"Если я дважды отключу элемент (добавив два одинаковых класса), я должен" включить "его дважды, чтобы моя логика работала".
Вы можете создать свой собственный плагин, который отслеживает, сколько раз добавлен класс, примерно так:
(function($) {
$.fn.addClassWithCount = function (className) {
return this.each(function() {
var $this = $(this),
count = $this.data("disable-count-" + className) + 1 || 1;
$this.data("disable-count-" + className, count);
$this.addClass(className);
});
};
$.fn.removeClassWithCount = function (className) {
return this.each(function() {
var $this = $(this),
count = $this.data("disable-count-" + className) - 1 || 0;
if (count < 0) count = 0;
$this.data("disable-count-" + className, count);
if (count === 0)
$this.removeClass(className);
});
};
})(jQuery);
Что бы вы тогда использовали, как стандартные .addClass()
и .removeClass()
:
$("someSelector").addClassWithCount("someClass");
Демо: http://jsfiddle.net/Sve9Q/2/
Обратите внимание, что вышесказанное - это то, что я быстро собрал, чтобы дать вам общую идею, поэтому, очевидно, ее можно было бы приманить и сделать более надежной.
Я не вижу его использования, но вы можете сделать это с помощью использования каждого()
$('.Bar').each(function(){
this.className = "Foo" + this.className;
});
ИЛИ, вы можете использовать перегрузку attr (attributeName, function (index, attr)), которая имеет функцию обратного вызова.
$( ".Bar" ).attr( "class", function( i, val ) {
return "Foo" + val ;
});
позволяет сказать, что это единственный якорь, и у вас уже есть этот "Foo Bar"
var myAnchor = document.getElementsByTagName("a")[0];
myAnchor.className += " Foo";
Для использования, которое вы указали, мое мнение таково, что ваш лучший выбор должен быть классом, который включает в себя количество раз, когда он был отключен.
В первый раз вы добавляете класс "disabled".
Если элемент уже "отключен", вы добавляете класс "disabled2" (или заменяете "disabled" на "disabled2") и т.д....
При повторном включении вы делаете наоборот.
Вы можете использовать селектор [class ^ = "disabled"] CSS3 для соответствия всем запрещенным * классам, которые вы хотите добавить, без указания их явно в вашем CSS.
Я думаю, что jQuery проверяет дубликаты при добавлении классов с addClass, вы можете просто использовать
$('.Bar').each(function(i, e) {
e.attr('class', e.attr('class') + ' Foo');
});
Пожалуйста, проверьте ниже код
$(function(){
alert($(".Bar").attr("class"));
$(".Bar").attr("class",($(".Bar").attr("class") + ' Foo'));
alert($(".Bar").attr("class"));
});
Вы можете проверить ссылку ниже