Reputation: 362
I have an HTML table which was two columns, I want to filter the table's data on a drill-down page, the user will filter the data using HTML select then once he clicks the submit button, JavaScript function will send the data to next page using GET/POST request.
I just to want to how can I insert the data into HTML select options from the HTML table at the run time using JavaScript. Please see the code for your reference.
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<select name="id">
<option selected="">Data for ID</option>
</select>
<select name="name">
<option selected="">Data for Name</option>
</select>
<input type="submit" name="" value="Submit">
<br>
<br>
<table border="2">
<tr>
<th>ID</th>
<th>Name</th>
</tr>
<tr>
<td>1</td>
<td>abc</td>
</tr>
<tr>
<td>2</td>
<td>dvc</td>
</tr>
<tr>
<td>3</td>
<td>nhy</td>
</tr>
<tr>
<td>4</td>
<td>wrw</td>
</tr>
</table>
</body>
</html>
Upvotes: 0
Views: 1086
Reputation: 597
By using plain JAVASCRIPT below is a solution for your use case:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<select name="id">
<option selected="">Data for ID</option>
</select>
<select name="name">
<option selected="">Data for Name</option>
</select>
<input type="submit" name="" value="Submit">
<br>
<br>
<table border="2">
<tr>
<th>ID</th>
<th>Name</th></tr>
<tr>
<td>1</td>
<td>abc</td>
</tr>
<tr>
<td>2</td>
<td>dvc</td>
</tr>
<tr>
<td>3</td>
<td>nhy</td>
</tr>
<tr>
<td>4</td>
<td>wrw</td>
</tr>
</table>
</body>
</html>
<script>
var callback = function() {
// Handler when the DOM is fully loaded
var el = document.querySelectorAll("tbody >tr");
el.forEach(function(elm) {
var cells = elm.querySelectorAll("td");
if (cells.length > 1) {
var id = cells[0].innerText;
var name = cells[1].innerText;
document.querySelector('select[name=id]').innerHTML += '<option value=' + id + '>' + id + '</option>';
document.querySelector('select[name=name]').innerHTML += '<option value=' + name + '>' + name + '</option>';
}
})
};
if (
document.readyState === "complete" ||
(document.readyState !== "loading" && !document.documentElement.doScroll)
) {
callback();
} else {
document.addEventListener("DOMContentLoaded", callback);
}
</script>
Upvotes: 1
Reputation: 892
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<select name="id" id="MyDataId">
<option selected="">Data for ID</option>
</select>
<select name="name" id= "MyDataName">
<option selected="">Data for Name</option>
</select>
<input type="submit" name="" value="Submit">
<br>
<br>
<table id="myTable" border="2">
<tr>
<th>ID</th>
<th>Name</th>
</tr>
<tr>
<td>1</td>
<td>abc</td>
</tr>
<tr>
<td>2</td>
<td>dvc</td>
</tr>
<tr>
<td>3</td>
<td>nhy</td>
</tr>
<tr>
<td>4</td>
<td>wrw</td>
</tr>
</table>
<script>
// self executing function here
(function() {
var idSelect = document.getElementById("MyDataId"); // selecting ID select
var table = document.getElementById('myTable'); // selecting Table
var nameSelect =document.getElementById("MyDataName"); // selecting Name select
for (var i = 0, row; row = table.rows[i]; i++) {
if (i === 0) { continue; } //for skipping headings
var optionId = document.createElement("option");
optionId.text = row.cells[0].innerHTML;
idSelect.add(optionId) // adding id option
var optionName = document.createElement("option");
optionName.text = row.cells[1].innerHTML;
nameSelect.add(optionName) // adding Name option
}
})();
</script>
</body>
</html>
This is the solution I came up with in pure JS, By adding scripts to your html
Upvotes: 1
Reputation: 1
Hi using jquery below is a solution
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<select name="id">
<option selected="">Data for ID</option>
</select>
<select name="name">
<option selected="">Data for Name</option>
</select>
<input type="submit" name="" value="Submit">
<br>
<br>
<table border="2">
<tr>
<th>ID</th>
<th>Name</th></tr>
<tr>
<td>1</td>
<td>abc</td>
</tr>
<tr>
<td>2</td>
<td>dvc</td>
</tr>
<tr>
<td>3</td>
<td>nhy</td>
</tr>
<tr>
<td>4</td>
<td>wrw</td>
</tr>
</table>
</body>
</html>
<script>
$(document).ready(function(){
$("tbody > tr").each(function () {
var cells = $(this).find('td');
if(cells.length > 1) {
var id = cells[0].innerText;
var name = cells[1].innerText;
$('select[name=id]').append('<option value='+id+'>'+id+'</option>');
$('select[name=name]').append('<option value='+name+'>'+name+'</option>');
}
})
});
</script>
Upvotes: 0