Skip to main content
Code Review

Return to Answer

deleted 255 characters in body
Source Link

I hope this helps. Made some comments in the snippet.

/* 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 deconstructconst theunit start,= endthis.dataset.range.split(' and')[2]; reassign
 const startYear = year - 50; // No need to deconstruct start/end and assign years again.
 const endYear = year - 18;

 // `this` give you access to HTML element. So no need for querySelector
  let unit = this.dataset.rangedirectly.split(' ')[2];
 this.setAttribute('data-range', `${startYear} ${endYear} ${unit}`)
 }
 
 connectedCallback() {
 let [start, end, unit] = this.dataset.range.split(' ');
 for (let i = start;startYear; i <= end;endYear; i++) {
 this.add(new Option(`${i}${unit}`, `${i}${unit}`));
 }
 }
};
customElements.define('option-time', OptionTime, {
 extends: 'select'
});
<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>
/* 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'
});
<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>

I hope this helps. Made some comments in the snippet.

/* Create <option> tags */
class OptionTime extends HTMLSelectElement {
 constructor() {
 super();
 this.setDateRange();
 }
 setDateRange() {
 const now = new Date();
 const year = now.getFullYear();
 const unit = this.dataset.range.split(' ')[2]; 
 const startYear = year - 50; // No need to deconstruct start/end and assign years again.
 const endYear = year - 18;

 // `this` give access to HTML element directly.
 this.setAttribute('data-range', `${startYear} ${endYear} ${unit}`);
 for (let i = startYear; i <= endYear; i++) {
 this.add(new Option(`${i}${unit}`, `${i}${unit}`));
 }
 }
};
customElements.define('option-time', OptionTime, {
 extends: 'select'
});
<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>
Source Link
/* 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'
});
<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>
default

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