Revision 4d90d1b4-ca9c-44be-ae84-a8841220c60f - Code Review Stack Exchange


<!-- language: lang-js -->

 /* Create <option> tags */
 class OptionTime extends HTMLSelectElement {
 constructor() {
 super();
 
 // Dynamically set the range 
 this.setDateRange();
 }
 
 setDateRange() {
 		const now = new Date();
 const year = now.getFullYear();

 // There is no need to deconstruct the start, end and reassign
 const startYear = year - 50;
 const endYear = year - 18;

 // `this` give you access to HTML element. So no need for querySelector
 let unit = this.dataset.range.split(' ')[2];
 this.setAttribute('data-range', `${startYear} ${endYear} ${unit}`)
 }
 
 connectedCallback() {
 let [start, end, unit] = this.dataset.range.split(' ');

 for (let i = start; i <= end; i++) {
 this.add(new Option(`${i}${unit}`, `${i}${unit}`));
 }
 }
 };

 customElements.define('option-time', OptionTime, {
 extends: 'select'
 });

<!-- language: lang-html -->

 <select is="option-time" name="Year" data-range="%startYear% %endYear% 年">
 <option value="" disabled selected>Year</option>
 </select>
 <select is="option-time" name="Month" data-range="1 12 月">
 <option value="" disabled selected>Month</option>
 </select>
 <select is="option-time" name="Day" data-range="1 31 日">
 <option value="" disabled selected>Day</option>
 </select>

<!-- end snippet -->


AltStyle によって変換されたページ (->オリジナル) /