Byłeś blisko, nie brałeś pod uwagę, że tych wierszy będzie więcej niż jeden z każdego typu, więc bardziej zasadne jest użycie document.querySelectorAll(...) i iteracja po tych "zwróconych" elementach.
Przykład
<div class="colors-picker">
<div>
<label for="color_even">Color for even rows</label>
<input type="color" id="color_even" value="#dddddd" />
</div>
<div>
<label for="color_odd">Color for odd rows</label>
<input type="color" id="color_odd" value="#999999" />
</div>
</div>
<table>
<thead>
<tr>
<th>Head title 1</th>
<th>Head title 2</th>
<th>Head title 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>Lorem ipsum 1.1</td>
<td>Lorem ipsum 1.2</td>
<td>Lorem ipsum 1.3</td>
</tr>
<tr>
<td>Lorem ipsum 2.1</td>
<td>Lorem ipsum 2.2</td>
<td>Lorem ipsum 2.3</td>
</tr>
<tr>
<td>Lorem ipsum 3.1</td>
<td>Lorem ipsum 3.2</td>
<td>Lorem ipsum 3.3</td>
</tr>
<tr>
<td>Lorem ipsum 4.1</td>
<td>Lorem ipsum 4.2</td>
<td>Lorem ipsum 4.3</td>
</tr>
<tr>
<td>Lorem ipsum 5.1</td>
<td>Lorem ipsum 5.2</td>
<td>Lorem ipsum 5.3</td>
</tr>
</tbody>
</table>
.colors-picker {
margin: 1em 0;
}
.colors-picker div {
margin: 0.5em 0;
}
.colors-picker label {
display: inline-block;
width: 12em;
text-align: right;
font: 700 0.9em monospace;
}
table {
min-width: 500px;
width: 50vw;
}
thead tr {
background-color: black;
color: white;
}
thead th {
padding: 0.2em;
text-align: center;
}
tbody td {
padding: 0.3em;
}
window.onload = pageLoaded;
function pageLoaded() {
const input_colors_picker = document.querySelectorAll('input[type="color"]');
input_colors_picker.forEach((input_color) => {
input_color.addEventListener('input', setRowBackgroundColor);
});
// Wywołanie ustawień domyślnych - zaraz po załadowaniu kodu html
// nie wymagane, możesz usunąć - przez zasymulowanie zdarzenia 'input'
// <input type="color" id="color_even" value="#dddddd" />
input_colors_picker[0].dispatchEvent(new Event('input', null));
// <input type="color" id="color_odd" value="#999999" />
input_colors_picker[1].dispatchEvent(new Event('input', null));
}
function setRowBackgroundColor(e) {
const type_row = (e.target.id === 'color_even') ? 'even' : 'odd';
const tr_rows = document.querySelectorAll(`tbody tr:nth-child(${type_row})`);
tr_rows.forEach((tr_row) => {
tr_row.style.backgroundColor = e.target.value;
});
}
[ How to trigger event in JavaScript? ] [ Interpolacja ]