2019-12-07 17:11:14 -07:00
|
|
|
---
|
2019-12-07 17:11:14 -07:00
|
|
|
id: 5ddb965c65d27e1512d44dde
|
2019-12-07 17:11:14 -07:00
|
|
|
title: Part 71
|
|
|
|
challengeType: 0
|
2021-01-13 03:31:00 +01:00
|
|
|
dashedName: part-71
|
2019-12-07 17:11:14 -07:00
|
|
|
---
|
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
# --description--
|
2019-12-07 17:11:14 -07:00
|
|
|
|
2019-12-07 17:11:14 -07:00
|
|
|
To remove the items `foodInputs` array, we will iterate through them by using the `forEach()` function.
|
2019-12-07 17:11:14 -07:00
|
|
|
|
2019-12-07 17:11:14 -07:00
|
|
|
Add `foodInputs.forEach()`.
|
2019-12-07 17:11:14 -07:00
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
# --hints--
|
2019-12-07 17:11:14 -07:00
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
See description above for instructions.
|
2019-12-07 17:11:14 -07:00
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
```js
|
|
|
|
assert(code.replace(/\s/g, '').match(/foodInputs.forEach\(\)/));
|
|
|
|
```
|
2019-12-07 17:11:14 -07:00
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
# --seed--
|
2019-12-07 17:11:14 -07:00
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
## --before-user-code--
|
2019-12-07 17:11:14 -07:00
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
```html
|
|
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<meta charset="utf-8" />
|
|
|
|
<title></title>
|
|
|
|
<meta name="description" content="" />
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
|
|
<link rel="stylesheet" href="styles.css" />
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div class="container">
|
|
|
|
<form id="calorie-form">
|
|
|
|
<h2 class="center">Calorie Counter</h2>
|
|
|
|
<div class="grid">
|
|
|
|
<legend>Sex</legend>
|
|
|
|
<div>
|
|
|
|
<input type="radio" name="sex" id="female" value="F" checked />
|
|
|
|
<label for="female">
|
|
|
|
Female (2,000 calories)
|
|
|
|
</label>
|
2019-12-07 17:11:14 -07:00
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
<div>
|
|
|
|
<input type="radio" name="sex" id="male" value="M" />
|
|
|
|
<label for="male">
|
|
|
|
Male (2,500 calories)
|
|
|
|
</label>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="grid" id="entries">
|
|
|
|
Breakfast
|
|
|
|
<input
|
|
|
|
type="number"
|
|
|
|
min="0"
|
|
|
|
class="cal-control"
|
|
|
|
id="breakfast"
|
|
|
|
/><br />
|
|
|
|
Lunch
|
|
|
|
<input type="number" min="0" class="cal-control" id="lunch" /><br />
|
|
|
|
Dinner <input type="number" min="0" class="cal-control" id="dinner" />
|
|
|
|
</div>
|
|
|
|
<button type="button" class="btn-add" id="add">
|
|
|
|
Add Entry
|
|
|
|
</button>
|
|
|
|
<button type="submit" class="btn-solid" id="calculate">
|
|
|
|
Calculate
|
|
|
|
</button>
|
|
|
|
<button type="button" class="btn-outline" id="clear">
|
|
|
|
Clear
|
|
|
|
</button>
|
|
|
|
</form>
|
|
|
|
<div id="output"></div>
|
|
|
|
</div>
|
|
|
|
</body>
|
|
|
|
</html>
|
|
|
|
```
|
2019-12-07 17:11:14 -07:00
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
## --after-user-code--
|
2019-12-07 17:11:14 -07:00
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
```html
|
|
|
|
</body>
|
|
|
|
</html>
|
|
|
|
```
|
2019-12-07 17:11:14 -07:00
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
## --seed-contents--
|
2019-12-07 17:11:14 -07:00
|
|
|
|
|
|
|
```html
|
|
|
|
<script>
|
|
|
|
document.getElementById('calorie-form').onsubmit = calculate;
|
|
|
|
|
|
|
|
function calculate(e) {
|
|
|
|
e.preventDefault();
|
|
|
|
clearOutput();
|
|
|
|
|
|
|
|
const total = Array.from(document.getElementsByClassName('cal-control'))
|
|
|
|
.map(meal => Number(meal.value))
|
|
|
|
.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
|
|
|
|
|
|
|
|
const maxCalories = document.getElementById('female').checked ? 2000 : 2500;
|
|
|
|
|
|
|
|
const difference = total - maxCalories;
|
|
|
|
|
|
|
|
const surplusOrDeficit = difference > 0 ? 'Surplus' : 'Deficit';
|
|
|
|
|
|
|
|
const output = document.getElementById('output');
|
|
|
|
|
|
|
|
const result = document.createElement('h3');
|
|
|
|
result.className = 'green-text';
|
|
|
|
const resultText = document.createTextNode(
|
|
|
|
`${Math.abs(difference)} Calorie ${surplusOrDeficit}`
|
|
|
|
);
|
|
|
|
|
|
|
|
result.appendChild(resultText);
|
|
|
|
output.appendChild(result);
|
|
|
|
|
|
|
|
const line = document.createElement('hr');
|
|
|
|
output.appendChild(line);
|
|
|
|
|
|
|
|
const recommended = document.createElement('h4');
|
|
|
|
const recommendedText = document.createTextNode(
|
|
|
|
`${maxCalories} Recommended Calories`
|
|
|
|
);
|
|
|
|
|
|
|
|
recommended.appendChild(recommendedText);
|
|
|
|
output.appendChild(recommended);
|
|
|
|
|
|
|
|
const consumed = document.createElement('h4');
|
|
|
|
consumed.innerHTML = `${total} Consumed Calories`;
|
|
|
|
output.appendChild(consumed);
|
|
|
|
|
|
|
|
output.setAttribute('class', 'bordered-class');
|
|
|
|
output.style.backgroundColor = '#FFF9C4';
|
|
|
|
}
|
|
|
|
|
|
|
|
document.getElementById('add').onclick = function() {
|
|
|
|
const foodInput = document.createElement('input');
|
|
|
|
foodInput.placeholder = 'food name';
|
|
|
|
foodInput.classList.add('food-control');
|
|
|
|
document.getElementById('entries').appendChild(foodInput);
|
|
|
|
|
|
|
|
const calorieInput = document.createElement('input');
|
|
|
|
calorieInput.setAttribute('type', 'number');
|
|
|
|
calorieInput.setAttribute('min', '0');
|
|
|
|
calorieInput.classList.add('cal-control');
|
|
|
|
calorieInput.classList.add('extra-cal-control');
|
|
|
|
document.getElementById('entries').appendChild(calorieInput);
|
|
|
|
};
|
|
|
|
|
|
|
|
document.getElementById('clear').onclick = function() {
|
|
|
|
clearOutput();
|
|
|
|
clearForm();
|
|
|
|
};
|
|
|
|
|
|
|
|
const clearOutput = () => {
|
|
|
|
document.getElementById('output').innerHTML = '';
|
|
|
|
document.getElementById('output').classList.remove('bordered-class');
|
|
|
|
};
|
|
|
|
|
|
|
|
const clearForm = () => {
|
|
|
|
const foodInputs = Array.from(
|
|
|
|
document.getElementsByClassName('food-control')
|
|
|
|
);
|
|
|
|
};
|
|
|
|
</script>
|
|
|
|
```
|
|
|
|
|
2020-11-27 19:02:05 +01:00
|
|
|
# --solutions--
|
2019-12-07 17:11:14 -07:00
|
|
|
|
|
|
|
```html
|
|
|
|
<script>
|
|
|
|
document.getElementById('calorie-form').onsubmit = calculate;
|
|
|
|
|
|
|
|
function calculate(e) {
|
|
|
|
e.preventDefault();
|
|
|
|
clearOutput();
|
|
|
|
|
|
|
|
const total = Array.from(document.getElementsByClassName('cal-control'))
|
|
|
|
.map(meal => Number(meal.value))
|
|
|
|
.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
|
|
|
|
|
|
|
|
const maxCalories = document.getElementById('female').checked ? 2000 : 2500;
|
|
|
|
|
|
|
|
const difference = total - maxCalories;
|
|
|
|
|
|
|
|
const surplusOrDeficit = difference > 0 ? 'Surplus' : 'Deficit';
|
|
|
|
|
|
|
|
const output = document.getElementById('output');
|
|
|
|
|
|
|
|
const result = document.createElement('h3');
|
|
|
|
result.className = 'green-text';
|
|
|
|
const resultText = document.createTextNode(
|
|
|
|
`${Math.abs(difference)} Calorie ${surplusOrDeficit}`
|
|
|
|
);
|
|
|
|
|
|
|
|
result.appendChild(resultText);
|
|
|
|
output.appendChild(result);
|
|
|
|
|
|
|
|
const line = document.createElement('hr');
|
|
|
|
output.appendChild(line);
|
|
|
|
|
|
|
|
const recommended = document.createElement('h4');
|
|
|
|
const recommendedText = document.createTextNode(
|
|
|
|
`${maxCalories} Recommended Calories`
|
|
|
|
);
|
|
|
|
|
|
|
|
recommended.appendChild(recommendedText);
|
|
|
|
output.appendChild(recommended);
|
|
|
|
|
|
|
|
const consumed = document.createElement('h4');
|
|
|
|
consumed.innerHTML = `${total} Consumed Calories`;
|
|
|
|
output.appendChild(consumed);
|
|
|
|
|
|
|
|
output.setAttribute('class', 'bordered-class');
|
|
|
|
output.style.backgroundColor = '#FFF9C4';
|
|
|
|
}
|
|
|
|
|
|
|
|
document.getElementById('add').onclick = function() {
|
|
|
|
const foodInput = document.createElement('input');
|
|
|
|
foodInput.placeholder = 'food name';
|
|
|
|
foodInput.classList.add('food-control');
|
|
|
|
document.getElementById('entries').appendChild(foodInput);
|
|
|
|
|
|
|
|
const calorieInput = document.createElement('input');
|
|
|
|
calorieInput.setAttribute('type', 'number');
|
|
|
|
calorieInput.setAttribute('min', '0');
|
|
|
|
calorieInput.classList.add('cal-control');
|
|
|
|
calorieInput.classList.add('extra-cal-control');
|
|
|
|
document.getElementById('entries').appendChild(calorieInput);
|
|
|
|
};
|
|
|
|
|
|
|
|
document.getElementById('clear').onclick = function() {
|
|
|
|
clearOutput();
|
|
|
|
clearForm();
|
|
|
|
};
|
|
|
|
|
|
|
|
const clearOutput = () => {
|
|
|
|
document.getElementById('output').innerHTML = '';
|
|
|
|
document.getElementById('output').classList.remove('bordered-class');
|
|
|
|
};
|
|
|
|
|
|
|
|
const clearForm = () => {
|
|
|
|
const foodInputs = Array.from(
|
|
|
|
document.getElementsByClassName('food-control')
|
|
|
|
);
|
|
|
|
|
2019-12-07 17:11:14 -07:00
|
|
|
foodInputs.forEach();
|
2019-12-07 17:11:14 -07:00
|
|
|
};
|
|
|
|
</script>
|
|
|
|
```
|