Флажок ввода JQuery устанавливает класс, только если класс отсутствует - PullRequest
2 голосов
/ 05 апреля 2011

Я хочу установить для класса флажок только в том случае, если для флажка отсутствует предшествующий класс. Также обратите внимание, что он может содержать пустой класс, а затем перезаписать его новым классом. Я использую следующее, но как мне добавить условие к находке?

$(this).find("input[type='radio'],input[type='checkbox']").addClass('IE8Border');

Я пытаюсь в этом направлении:

$(this).find("input[type='radio'],input[type='checkbox']").each(function() {
    $(this)[("[class='']")].addClass('IE8Border');
    $(this)[(":not([class])")].addClass('IE8Border');
});

Ответы [ 3 ]

3 голосов
/ 05 апреля 2011

Мне немного непонятно, о чем вы спрашиваете, поэтому у меня есть два ответа для вас:

Если вы пытаетесь избежать добавления дублирующих классов (т.е. добавление IE8Border дважды), вам не нужно ничего фильтровать. .addClass() добавит класс, только если он еще не существует в элементе.

Если вы хотите добавить класс только к тем элементам, у которых его еще нет, попробуйте следующее:

$(this).find("input[type='radio'],input[type='checkbox']").filter(function() {
   return this.className === '';
}).addClass('IE8Border');

Посмотрите на эту демонстрацию, чтобы увидеть, как это работает ->

3 голосов
/ 05 апреля 2011

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

Попробуйте это:

$(this).find("input[type='radio'],input[type='checkbox']").filter(function(){
    return !$(this).hasClass('IE8Border');
}).addClass('IE8Border');

Вы также можете избежать использования фильтра со следующей версией:

$(this).find("input[type='radio']:not(.IE8Border),input[type='checkbox']:not(.IE8Border)").addClass('IE8Border'); 

EDIT: Если ваша проверка только для существования класса, попробуйте это:

$(this).find("input[type='radio'],input[type='checkbox']").filter(function(){
  var thisClass = $(this).attr("class");
    return !(thisClass && thisClass.length > 0);
}).addClass('IE8Border');
1 голос
/ 05 апреля 2011

Я полностью согласен с ответом Cybernate.Но вы просто хотите добавить класс или перезаписать?Для последнего попробуйте:

$("input[type='radio'],input[type='checkbox']",this).filter(function(){
    var thisClass = $(this).attr("class");
    return !(thisClass && thisClass.length > 0);
}).removeAttr('class').addClass('IE8Border');

и, чтобы расширить ответ Cybernate, вместо filter(), вы также можете использовать функцию not().

$("input[type='radio'],input[type='checkbox']").not('.IE8Border').addClass('IE8­Border');
...