0

Is there anyway I can simplify this JS:

$('#collapse_notebook').on('hide.bs.collapse', function () {
  $('#notebook-caret').removeClass( "fa-caret-up" );
  $('#notebook-caret').addClass( "fa-caret-down" );
})

$('#collapse_note').on('hide.bs.collapse', function () {
  $('#note-caret').removeClass( "fa-caret-up" );
  $('#note-caret').addClass( "fa-caret-down" );
})
Qantas 94 Heavy
  • 15,750
  • 31
  • 68
  • 83
Jeremy Lynch
  • 6,780
  • 3
  • 52
  • 63
  • You can use chaining like mentioned below. Depending on your markup, it could be possible to simplify it further also. Like for example if the element whose class is removed/added is a child of the selector on which the operation is done etc. – Harry Aug 02 '14 at 06:42

3 Answers3

3

Multiple selector Chaining is the word: :)

How this is done: demo http://jsfiddle.net/49NBu/ (shows the extracting bit)

Code

$('#collapse_note,#collapse_notebook').on('hide.bs.collapse', function () {
  var id = $(this).prop('id').split('_')[1];

  $('#'+id+'-caret').removeClass( "fa-caret-up" );
  $('#'+id+'-caret').addClass( "fa-caret-down" );
})
Community
  • 1
  • 1
Tats_innit
  • 33,991
  • 10
  • 71
  • 77
1

This should work.

('#collapse_notebook,#collapse_note').on('hide.bs.collapse', function () {
  var curr_id = this.id.split('_')[1]
  $('#'+curr_id+'-caret').toggleClass('fa-caret-up fa-caret-down');
})
Abhilash
  • 1,610
  • 9
  • 19
0

use comma separated multiple selectors:

$('#collapse_notebook,#collapse_note').on('hide.bs.collapse', function () {
 $("#"+this.id.replace('collapse_','')+"-caret").removeClass( "fa-caret-up" );
 $("#"+this.id.replace('collapse_','')+"-caret").addClass( "fa-caret-down" );
});
Milind Anantwar
  • 81,290
  • 25
  • 94
  • 125