Одна из ваших переменных не та, о которой вы думаете.
const p1 = document.querySelector('.test > :first-child').textContent;
const p2 = document.querySelector('.test > :last-child').textContent;
let p3;
console.log(p1); // 13
console.log(p2); // 5
console.log( p1 + p2 ); // 135 (concatenated strings)
console.log( parseInt(p1) + parseInt(p2) ); // 18
console.log( parseInt(p1) + parseInt(p3) ); // NaN
<div class="test">
<div>13</div>
<div>5</div>
</div>
Добавлен следующий пример, чтобы продемонстрировать возможный подход к выполнению этой программы для нескольких элементов:
// utility for parsing ints from dom elements.
// throws on NaN
function asInt (element) {
const intValue = parseInt(element.textContent);
if (isNaN(intValue)) {
throw new Error('unable to parse number');
}
return intValue;
}
function doSomethingInteresting () {
// get the elements where class="patient"
const patients = document.querySelectorAll('.patient');
// iterate over each 'patient' (each <li> in this case)
patients.forEach((patient, index) => {
// look for child nodes with class="value"
// and extract their contents as integers via map(asInt)
const numbers = [...patient.querySelectorAll('.value')].map(asInt);
// compute the sum of the numbers for this 'patient'
const sum = numbers.reduce((acc, v) => (acc + v), 0);
// do whatever you need to do with the result
console.log(`patient ${index}: ${sum}`);
})
}
// go
doSomethingInteresting();
.patient {
display: flex;
}
.patient > * {
flex: 0 0 60px;
margin: 16px 8px;
border: 1px solid #ccc;
padding: 8px;
}
<ul>
<li class="patient">
<div class="value">13</div>
<div class="value">5</div>
</li>
<li class="patient">
<div class="value">26</div>
<div class="value">15</div>
</li>
<li class="patient">
<div class="value">14</div>
<div class="value">3</div>
</li>
<li class="patient">
<div class="value">16</div>
<div class="value">99</div>
</li>
</ul>