Reputation: 7210
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" );
})
Upvotes: 0
Views: 199
Reputation: 1610
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');
})
Upvotes: 1
Reputation: 34107
Multiple selector Chaining is the word: :)
How this is done: demo http://jsfiddle.net/49NBu/ (shows the extracting bit)
Extract the id
and use split
as in your case there is a common pattern of anything after _
is what needed for the operation within the function.
API : split
: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split
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" );
})
Upvotes: 3
Reputation: 82231
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" );
});
Upvotes: 0