I wanted to check if the <p> elements inside my <div> with id screen are a valid mathematical expression,doing the validation inside my operationLogic() then return the result of whatever was the mathematical expression on my <div> with id screen again, but I'm having a hard time into finding out how to do that
let screen = document.getElementById('screen');
function getButtonValue() {
var element = event.target.innerHTML
var insert = document.createElement("p");
if (element == '=') {
insert.innerHTML = `${operationLogic()}`;
} else {
insert.innerHTML = `${element}`;
}
screen.appendChild(insert);
};
function operationLogic() {
let p = screen.querySelectorAll('p');
let number = ''
p.forEach(element => {
let number = +element.innerHTML;
return Number(number)
})
}
<div id="calculator">
<div id=screen></div>
<div id="operationMain">
<ul>
<li class="operatorColor" onclick="getButtonValue()">{</li>
<li class="operatorColor" onclick="getButtonValue()">}</li>
<li class="operatorColor" onclick="getButtonValue()">(</li>
<li class="operatorColor" onclick="getButtonValue()">)</li>
<li class="blue" onclick="getButtonValue()">=</li>
<li class="operatorColor" onclick="getButtonValue()">+</li>
<li class="operatorColor" onclick="getButtonValue()">-</li>
<li class="operatorColor" onclick="getButtonValue()">x</li>
<li class="operatorColor" onclick="getButtonValue()">÷</li>
<li class="operatorColor" onclick="getButtonValue()">%</li>
<li class="operatorColor" onclick="getButtonValue()">.</li>
<li onclick="getButtonValue()">0</li>
<li onclick="getButtonValue()">1</li>
<li onclick="getButtonValue()">2</li>
<li onclick="getButtonValue()">3</li>
<li onclick="getButtonValue()">4</li>
<li onclick="getButtonValue()">5</li>
<li onclick="getButtonValue()">6</li>
<li onclick="getButtonValue()">7</li>
<li onclick="getButtonValue()">8</li>
<li onclick="getButtonValue()">9</li>
<li onclick="getButtonValue()">00</li>
</ul>
</div>
</div>
It is much easier if you delegate.
It is quite complex to validate and you would need a parser for that
Here is a possible way - extended version here
I had to change x and ÷ to * and /. You can keep them but then we need data-attributes on the LIs instead of textcontent