【问题标题】:DOM Properties with JavaScript带有 JavaScript 的 DOM 属性
【发布时间】:2018-11-07 20:24:33
【问题描述】:

假设我希望用户能够使用 Javascript 和复选框列表来选择字体样式。

所以我有这个代码:

<input type="checkbox" id="Style0" />Bold

<input type="checkbox" id="Style1" />Italic

<input type="checkbox" id="Style2" />Underline<br/>

我是否需要创建一个 for 循环,如果它被检查则将其添加到 document.body.style.fontStyle?他们可以一次选择多个框并应用这些样式。

【问题讨论】:

  • 您希望用户能够选择字体样式然后立即更新,还是选择字体样式并在其他时间更新?如果是前者,请检查this SO post
  • 按下按钮后会更新
  • 是的,所以请继续查看我之前评论过的链接。本质上,您可以拥有一个oncheck 侦听器,您可以为其分配一个函数。将会发生的是检查框时,将调用该功能。在上述函数中,您可以使用 JavaScript 来更改 CSS。

标签: javascript dom


【解决方案1】:

你可以做的是有如下三种不同的 CSS 样式:

.bold {
    font-weight: bold;
}

.italic {
    font-style: italic;
}

.underline {
    text-decoration: underline;
}

使用 JQuery,您可以监听事件并将相关类应用于元素。

例如,如果您有以下段落元素:

<p id="paragraph">This is a paragraph.</p>

在您的 javascript 中,您将拥有:

$(document).ready(function() {
    $(document).on('change', '#style0, #style1, $style2', function() {
        var paragraph = $('#paragraph');

        if ($('#style0').is(':checked') && !paragraph.hasClass('bold')) {
            paragraph.addClass('bold');
        } else if (!$('#style0').is(':checked') && paragraph.hasClass('bold')) {
            paragraph.removeClass('bold');
        }

        if ($('#style1').is(':checked') && !paragraph.hasClass('italic')) {
            paragraph.addClass('italic');
        } else if (!$('#style1').is(':checked') && paragraph.hasClass('italic')) {
            paragraph.removeClass('italic');
        }

        if ($('#style2').is(':checked') && !paragraph.hasClass('underline')) {
            paragraph.addClass('underline');
        } else if (!$('#style2').is(':checked') && paragraph.hasClass('underline')) {
            paragraph.removeClass('underline');
        }
    });
});

更新:

对于纯 JavaScript 解决方案:

document.getElementById('style0').addEventListener('change', function() {
    var paragraph = document.getElementById('paragraph');

    if (this.checked) {
        paragraph.classList.add('bold');
    } else {
        paragraph.classList.remove('bold');
    }
});

document.getElementById('style1').addEventListener('change', function() {
    var paragraph = document.getElementById('paragraph');

    if (this.checked) {
        paragraph.classList.add('italic');
    } else {
        paragraph.classList.remove('italic');
    }
});

document.getElementById('style2').addEventListener('change', function() {
    var paragraph = document.getElementById('paragraph');

    if (this.checked) {
        paragraph.classList.add('underline');
    } else {
        paragraph.classList.remove('underline');
    }
});

【讨论】:

  • 那不是 JQuery 吗?
  • @Jona 是的。您只是在寻找纯 Javascript 解决方案吗?
  • 是的,据我所知,使用 JQuery 会容易得多,我们的老师指定我们只能使用 Javascript。所以我有一个解决方案,然后我就像开枪一样。唯一的选择真的是创建一个 for 循环或 if 语句,然后以这种方式添加样式吗?
  • 所以我知道我可以做一些 if 语句,但是我如何添加多个 CSS 样式?我知道它只是一个逗号,有没有好的方法来检测是否有多个样式并添加一个逗号?
  • @Jona 我更新了我的答案以包括非 JQuery 解决方案。由于涉及到添加多个 CSS 样式,您能再解释一下吗?
猜你喜欢
  • 2015-04-10
  • 2014-02-04
  • 2017-01-29
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
  • 2011-10-19
  • 2011-10-23
  • 2013-11-06
相关资源
最近更新 更多