Hey all! I hope everyone is doing well and staying safe
Somebody asked on the Webflow Facebook group this morning how to display a tab based on the day of the week.
I cobbled together the below solution and thought I’d share what I came up with in case anybody else was wanting to achieve the same effect.
Disclaimer: I am by no means a code expert (complete newbie, actually). So if there is a more efficient way to do this, or I have made a mistake, then please comment and let me know!
Step 1.
Drop in a tabs component:
Step 2.
Create 7 tabs, with 7 tab panes inside. Make sure all your tab links have the class .tab-link
, and all your tab panes have the class .tab-pane
:
Step 3
Copy and paste the below code into the before /body tag:
<script>
//remove the default tab and content
$(".tab-link").removeClass("w--current");
$(".tab-pane").removeClass("w--tab-active");
$(document).ready(function(){
//get the day of the week
var fullDate = new Date();
var dayOfWeek = fullDate.getDay();
//changing Sunday to 7 (instead of 0)
if (dayOfWeek == 0) {
dayOfWeek = 7;
}
//display tab and content that match today's number (1 to 7)
$(".tab-link:nth-child(" + dayOfWeek + ")").addClass("w--current");
$(".tab-pane:nth-child(" + dayOfWeek + ")").addClass("w--tab-active");
});
</script>
Code Breakdown:
1. This removes the active tab and pane when the page loads. By default, this is the tab you left selected in the designer when you last hit publish.
$(".tab-link").removeClass("w--current");
$(".tab-pane").removeClass("w--tab-active");
2. new Date()
creates a new date object, and getDay()
then retrieves the current day from that object. Note: 0=Sunday, 1=Monday, … 6=Saturday. For more info on the getDay()
method, you can visit here.
var fullDate = new Date();
var dayOfWeek = fullDate.getDay();
3. This is just a super simple if
statement that checks if the current day is 0 (Sunday) and replaces it with a 7.
if (dayOfWeek == 0) {
dayOfWeek = 7;
}
4. This is what makes the correct tab and pane show up. So if it’s a Monday then tab 1 will display, Tuesday tab 2, Wednesday tab 3, etc.
$(".tab-link:nth-child(" + dayOfWeek + ")").addClass("w--current");
$(".tab-pane:nth-child(" + dayOfWeek + ")").addClass("w--tab-active");
And that’s it! A good use case for this would be if you had a restaurant that had different menus for each day of the week, and you wanted to automatically display the current day’s menu to the user.
I hope this was useful! Please let me know if you have any questions and I’ll try my best to help out
Edit 1: Correcting code typos.
Edit 2: Updating code screenshot.