如何在jquery中切换attr()

ali*_*s51 54 jquery

我有一个简单的添加属性函数:

$(".list-toggle").click(function() {
    $(".list-sort").attr('colspan', 6);
});
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何将其转换为切换,因此colspan="6"在下一次单击时从元素中删除?

Rie*_*u͢s 115

如果你有点喜欢:

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

工作小提琴

  • 最干净,恕我直言! (2认同)
  • @Gcamara14 `$('.list-sort')` 的目标是 DOM 中的元素 `.attr()` 是一个 jQuery 函数,用于设置属性值,它采用两个参数 `attribute` 和 `value`。在本例中,“colspan”是属性参数,其值是匿名函数。`函数(索引,属性){ 返回属性 == 6 ?空:6;}` 该函数使用三元运算符“?”,类似于“if 语句”。如果传递的“attr”等于“6”,则返回“null”,否则返回“6” (2认同)

mus*_*ing 59

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

这是一个工作小提琴的例子.

请参阅下面的@RienNeVaPlus的答案,以获得更优雅的解决方案.


Bit*_*rse 34

对于readonly/disabled和其他具有true/false值的属性

$(':submit').attr('disabled', function(_, attr){ return !attr});
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,attr是`typeof string`,所以我写了`$(selector).attr('aria-expanded',function(_,attr){return!(attr =='true')})` (6认同)

Fra*_*sc0 6

我知道这已经老了并且已经回答但是我最近不得不实现这个并决定制作2个简单的jQuery插件,可能对那些感兴趣的人有所帮助

用法:

// 1
$('.container').toggleAttr('aria-hidden', "true");
// 2
$('.container').toggleAttrVal('aria-hidden', "true", "false");
Run Code Online (Sandbox Code Playgroud)

1 - 切换整个属性,无论原始值是否与您提供的值不匹配.

2 - 在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;
  };
Run Code Online (Sandbox Code Playgroud)

这是您在原始示例中使用它的方式:

$(".list-toggle").click(function() {
    $(".list-sort").toggleAttr('colspan', 6);
});
Run Code Online (Sandbox Code Playgroud)


thi*_*der 5

这将是使用闭包的好地方:

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

toggled变量将仅存在于定义的范围内,并可用于存储从一个单击事件到下一个单击事件的切换状态。

  • 赞成,因为这是闭包含义的一个很好的例子 (2认同)