整合jQuery代码

时间:2017-10-10 12:20:23

标签: javascript jquery

我有30个按钮,范围从#p3-btn#p30-btn,点击后.p3 div一直到.p30 div会产生不同的效果。如何合并此代码,以便我不必将代码复制并粘贴30次以下并更改ID和类?

  $('#p3-btn').click(function () {
    $('.p3').fadeIn().delay(2000).fadeOut();
  });

干杯。

3 个答案:

答案 0 :(得分:1)

这是编程中DRY(不要重复自己)概念的一个很好的演示。解决它的方法之一是使用ID参数创建一个函数,您将使用该参数来引用元素的id和其他元素的类,例如:

function attachClick(id){
  $('#' + id + '-btn').click(function () {
     $('.' + id).fadeIn().delay(2000).fadeOut();
  });
}

然后只需调用函数(例如,来自for循环):

attachClick('p30');

虽然上面的示例与您现有代码的一对一匹配,但更好的方法是找到每个按钮与其影响的元素之间的关系,这样您就可以避免附加单独监听每个按钮,而是将一个监听器附加到父元素,让事件处理函数处理其余部分。但是,如果没有看到您的标记,我无法告诉您是否可以在不重写的情况下执行此操作。例如,如果你有这样的标记,这将是微不足道的:

<div class="container">
  <button>Button</button>
  <div>Div to be affected</div>
</div>

答案 1 :(得分:0)

Shomz的anwser更简单,你可以使用jquery选择器:

$('button[id^="p"][id$="-btn"]').on("click", function() { 
    var id = $(this).attr("id").replace("-btn", "").replace("p", "");
    $('.p' + id).fadeIn().delay(2000).fadeOut();
});

$('button[id^="p"][id$="-btn"]')允许您选择button以'p'开头并以'-btn'结尾的元素类型id

答案 2 :(得分:0)

您可以使用属性选择器来实现此目的。

<div class="dropdown">
    <button class="btn dropdown-toggle" type="button" data-toggle="dropdown" style="width:100%">MONTHS
    <span class="caret"></span></button>
    <ul class="dropdown-menu" style="color: black;text-align: center;">
        <li ng-model="vm.calendarView" uib-btn-radio="'month'" ng-click="vm.cellIsOpen = false">Month</li>
        <li ng-model="vm.calendarView" uib-btn-radio="'week'" ng-click="vm.cellIsOpen = false">Week</li>
        <li ng-model="vm.calendarView" uib-btn-radio="'day'" ng-click="vm.cellIsOpen = false">Day</li>
    </ul>
</div>
function createDivs(len) {
  var $div = $('<div>');
  for (var i = 0; i < len; i++) {
    var prefix = 'p' + i;
    var $inner = $('<div>');
    $inner.attr('id', prefix + '-btn')
    var $p = $('<p>');
    $p.text(i).addClass(prefix);
    $inner.append($p);
    $div.append($inner);
  }
  return $div;
}
$(function() {
  $('.content').append(createDivs(30));

  $('[id^="p"][id$="-btn"]').on('click', function() {
    $(this).find('[class^=p]').fadeOut().delay(2000).fadeIn();
  });
})
[id$="-btn"] {
  width: 100%;
  border: 1px solid gray;
}