【问题标题】:Is there a shorter way to do this in Javascript? (more below)在Javascript中是否有更短的方法来做到这一点? (更多下文)
【发布时间】:2024-01-01 20:50:01
【问题描述】:

我正在制作一个计算器,并将eventListeners 添加到数字按钮中。 JS 看起来是这样的:

document.addEventListener('click', e =>{
    if (e.target.matches('#num1')){
        const x = document.createElement('p');
        x.innerHTML = e.target.innerHTML;
        screen.appendChild(x)
    }
    else if (e.target.matches('#num2')){
        const x = document.createElement('p');
        x.innerHTML = e.target.innerHTML;
        screen.appendChild(x)
    } 

    else if (e.target.matches('#num3')){
        const x = document.createElement('p');
        x.innerHTML = e.target.innerHTML;
        screen.appendChild(x)
    } 
})

它工作正常,但显然有10个数字按钮,所以我尝试使用三元运算符使其更短,或者从这部分中制作一个函数:

        const x = document.createElement('p');
        x.innerHTML = e.target.innerHTML;
        screen.appendChild(x)

但是,这种方式 e.target 是未定义的。任何建议表示赞赏!

标记:

<button type='button' class='btn numBtn' id='num1'>1</button>
<button type='button' class='btn numBtn' id='num2'>2</button>
<button type='button' class='btn numBtn' id='num3'>3</button>

【问题讨论】:

    标签: javascript html dom project calculator


    【解决方案1】:

    检查类而不是 ID。

    由于您不是故意插入或检索 HTML 标记,因此您还应该使用 textContent 而不是 innerHTML,这样更安全、更快捷且语义更合适。

    document.addEventListener('click', e =>{
        if (e.target.matches('.numBtn')){
            const x = document.createElement('p');
            x.textContent = e.target.textContent;
            screen.appendChild(x)
        }
    })
    

    你也可以使用insertAdjacentHTML,虽然这和innerHTML有同样的问题。

    document.addEventListener('click', e =>{
        if (e.target.matches('.numBtn')){
            screen.insertAdjacentHTML(
                'beforeend',
                `<p>${e.target.textContent}</p>`
            );
        }
    })
    

    【讨论】:

    • 非常感谢,不知道怎么没想到那个解决方案……
    最近更新 更多