在带有范围滑块的元素上添加或删除类

时间:2016-06-01 17:37:45

标签: jquery rangeslider

我有一个使用范围滑块的脚本,该滑块根据滑块的位置更改价格值和人数。用途是根据人数计算办公空间的价格。以下是此笔中的工作示例:

http://codepen.io/anon/pen/OXPvZO

使用滑块时,会显示人物图标(示例中为黑色块),这些图标旨在根据计数突出显示活动类。因此,当您浏览时,活动类将应用于正确的图标数或根据幻灯片方向移除。我无法确定处理此类操作的方法。

这是我用来处理现在的JS的那个JS:

jQuery( function( $ ) {
    var personCount = 12;

    for ( i = 0; i < personCount; i++ ) {
        $( '.person-count' ).append( '<span class="person person-' + i + '" />' );
    };

    $( '[data-slider]' ).on( 'slider:ready slider:changed', function( event, data ) {
        $( this ).parents( '.price-slider' )
            .find( '.person-integer' ).html( data.count ).end()
            .find( '.js-price' ).html( data.value ).end()
            .find( '.person-' + data.count ).addClass( 'is-active' );
    });
});

要注意的一件事(如Codepen中的HTML中所示)是数据计数在8之后跳过两次。因此从8到10到12.这似乎抛弃了我之前尝试过的方法。

如果有人有任何我可以在这里使用的建议或方法,我将非常感激。

1 个答案:

答案 0 :(得分:0)

它跳过的原因是因为你在数据滑块计数中缺少9和11。因为您使用循环来生成元素,所以在更改的事件中找不到具有类“.person-11”或“.person-9”的元素。

您可以根据以下代码从data-slider-count获取实际值,并使用它们生成基于data.count找到的span元素。

jQuery(function($) {

  //get values from slider
  var personCounts = $('.slider-input').attr('data-slider-count').split(',');

  //Create span elements based on values and not count
  for (i = 0; i < personCounts.length; i++) {
    $('.person-count').append('<span class="person person-' + personCounts[i] + '" />');
  };

  //these two should be active based on the default value of the slider
  $('.person-1').addClass('is-active');
  $('.person-2').addClass('is-active');

  $('[data-slider]').on('slider:ready slider:changed', function(event, data) {
    $('.person-integer').html(data.count);
    $('.js-price').html(data.value);
    $('.person-' + data.count).addClass('is-active');
  });
});