2013-12-04 3 views
0

Допустим, у меня есть элементКак добавить дублирующий класс к объекту DOM с помощью jQuery?

<a class="Foo Bar" /> 

И я хочу, чтобы добавить дубликат класс, так как я закодировать это:

$('.Bar').addClass('Foo'); 

Класс не добавляется, потому что элемент уже есть.

Я хочу, чтобы закодировать что-то вроде этого:

$('.Bar').addClassForcebly('Foo'); // Fake method, only for example. 

И я ожидаю, что следующий результат:

<a class="Foo Bar Foo" /> 

Я пытался использовать перегрузку addClass метода, в JQuery в:

$('.Bar').addClass(function(i, c) { 
    return c + ' Foo'; 
}); 

Но это тоже не работает. Он просто не добавляет повторяющийся класс. Как мне это сделать?


Суть этого вопрос довольно прост: я хочу, чтобы мои HTML элементы были в состоянии быть отключено и включены Mulitple раз. Если я дважды отключу элемент (добавив два одинаковых класса), я должен «включить» его дважды, чтобы моя логика работала.

+1

Можете ли вы сказать, какая польза/разница получается путем дублирования класса? Я не могу понять * any *. – techfoobar

+0

Это действительно проблема интерпретации браузера; у вас нет смысла назначать один и тот же класс два объекта DOM. – DocKuro

+0

Я не думаю, что это полезно, потому что класс уже добавляет один раз. Есть ли какая-либо конкретная причина AgentFire –

ответ

1

"Если я 'отключить' элемент дважды (добавление двух одинаковых классов) я должен" включите «это дважды, чтобы моя логика работала».

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

(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/

Обратите внимание, что приведенное выше - это то, что я быстро вымотал, чтобы дать вам общую идею, поэтому, очевидно, его можно было бы приманить и сделать более надежным.

+0

Это лучшее. – AgentFire

2

Я не вижу использовать его, но вы можете сделать это, то, как с помощью each()

$('.Bar').each(function(){ 
    this.className = "Foo" + this.className; 
}); 

ИЛИ, вы можете использовать attr(attributeName, function(index, attr)) перегрузку, которая имеет функцию обратного вызова.

$(".Bar").attr("class", function(i, val) { 
    return "Foo" + val ; 
}); 
2

позволяет говорить о его единственный якорь, и у вас уже есть это «Foo Bar» добавил

var myAnchor = document.getElementsByTagName("a")[0]; 
myAnchor.className += " Foo"; 
1

Я думаю, что Jquery проверяет дубликаты при добавлении классов с addClass, вы могли бы просто использовать

$('.Bar').each(function(i, e) { 

    e.attr('class', e.attr('class') + ' Foo'); 

}); 
1

Для использования Вами, я считаю, что ваш лучший выбор должен быть классом, который включает в себя количество отключений.

Первый раз, когда вы добавляете класс 'disabled'.

Если элемент уже «отключен» вы добавляете класс «disabled2» (или заменить «отключено» с «disabled2») и т.д. ...

При повторном что позволяет сделать наоборот.

Вы можете использовать селектор CSS3 [class^= "disabled"] для соответствия всем отключенным * классам, которые вы хотите добавить, без указания их явно в вашем CSS.

+0

У меня есть CSS на моем сайте, и он не нравится эти параметры. – AgentFire

+0

какие варианты? Я говорю о создании класса CSS с именами – DocKuro

+0

В случае, если моя логика пользовательского интерфейса решит отключить элемент десять раз - вы посоветуете мне предварительно загрузить CSS, создав десять 'отключенных' классов? – AgentFire

0

Пожалуйста, проверьте ниже код

$(function(){ 
    alert($(".Bar").attr("class")); 

    $(".Bar").attr("class",($(".Bar").attr("class") + ' Foo')); 

    alert($(".Bar").attr("class")); 

}); 

Вы можете проверить ссылку ниже

http://jsfiddle.net/GS43e/

Смежные вопросы