как переключить attr() в jquery

У меня есть простая функция атрибута добавления:

$(".list-toggle").click(function() {
    $(".list-sort").attr('colspan', 6);
});

Мой вопрос: как я могу превратить это в переключатель, так что colspan="6" удаляется из элемента при следующем нажатии?

Ответы

Ответ 1

$('.list-toggle').click(function() {
    var $listSort = $('.list-sort');
    if ($listSort.attr('colspan')) {
        $listSort.removeAttr('colspan');
    } else {
        $listSort.attr('colspan', 6);
    }
});

Вот пример рабочего скрипта.

См. Ответ от @RienNeVaPlus ниже для более элегантного решения.

Ответ 2

Если вы чувствуете фантазию:

$('.list-sort').attr('colspan', function(index, attr){
    return attr == 6 ? null : 6;
});

Рабочий скрипт

Ответ 3

Для readonly/disabled и других атрибутов с истинными/ложными значениями

$(':submit').attr('disabled', function(_, attr){ return !attr});

Ответ 4

Я знаю, что это старый и ответил, но мне недавно пришлось это реализовать и решил сделать 2 простых плагина jQuery, которые могли бы помочь заинтересованным

Применение:

// 1
$('.container').toggleAttr('aria-hidden', "true");
// 2
$('.container').toggleAttrVal('aria-hidden', "true", "false");

1 - Переключает весь атрибут независимо от того, совпадает ли исходное значение с тем, которое вы указали.

2 - Переключает значение атрибута между двумя предоставленными значениями.

 // jquery toggle whole attribute
  $.fn.toggleAttr = function(attr, val) {
    var test = $(this).attr(attr);
    if ( test ) { 
      // if attrib exists with ANY value, still remove it
      $(this).removeAttr(attr);
    } else {
      $(this).attr(attr, val);
    }
    return this;
  };

  // jquery toggle just the attribute value
  $.fn.toggleAttrVal = function(attr, val1, val2) {
    var test = $(this).attr(attr);
    if ( test === val1) {
      $(this).attr(attr, val2);
      return this;
    }
    if ( test === val2) {
      $(this).attr(attr, val1);
      return this;
    }
    // default to val1 if neither
    $(this).attr(attr, val1);
    return this;
  };

Так вы можете использовать его в оригинальном примере:

$(".list-toggle").click(function() {
    $(".list-sort").toggleAttr('colspan', 6);
});

Ответ 5

Это было бы хорошим местом для использования закрытия:

(function() {
  var toggled = false;
  $(".list-toggle").click(function() {
    toggled = !toggled;
    $(".list-sort").attr("colspan", toggled ? 6 : null);
  });
})();

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

Ответ 6

За что это стоит.

$('.js-toggle-edit').on('click', function (e) {
    var bool = $('.js-editable').prop('readonly');
    $('.js-editable').prop('readonly', ! bool);
})

Имейте в виду, что вы можете передать закрытие на.prop() и выполнить проверку каждого элемента. Но в этом случае это не имеет значения, это просто массовый переключение.

Ответ 7

$(".list-toggle").click(function() {
    $(this).hasAttr('colspan') ? 
        $(this).removeAttr('colspan') : $(this).attr('colspan', 6);
});

Ответ 8

$(".list-toggle").click(function() {
    $(this).attr('colspan') ? 
    $(this).removeAttr('colspan') : $(this).attr('colspan', 6);
});