javascript - 有选择地添加和删除相同 CSS 属性的值

标签 javascript html jquery css

我正在使用 jquery 创建一个开放类型功能测试器,并希望让用户能够看到同时应用的多个开放类型功能。
第一个下拉列表将属性设置为 font-feature-settings: ‘frac’ 1; ,他的第二个下拉列表将属性设置为 font-feature-settings: ‘smcp’ 1;目前,如果两个下拉菜单都处于事件状态,一个会覆盖另一个的指令。我需要的是,如果它们同时处于事件状态,则该属性设置为 font-feature-settings: ‘frac’ 1, ‘smcp’ 1;因此,如果只有其中之一被停用,则只会从属性中删除相应的值。
注意:我知道当我从 Google 字体站点链接字体时 Open Type 功能不起作用,因此我一直在安装它的情况下对其进行测试。
提前致谢。

.font-tester{
      color: #000;
      line-height: normal;
      width: 100%;
      word-wrap: break-word;
      padding-top: 30px;
  }
<style> @import url('https://fonts.googleapis.com/css2?family=EB+Garamond&display=swap'); </style>

<div class="tester-container">
    
  <select id="tester-figures">
          <option value="none" selected>Default</option>
          <option value="'frac' 1">Fractions</option>
  </select>

  <select id="tester-smcp">
    <option value="none" selected>Default</option>
    <option value="'smcp' 1">Small caps</option>
  </select>
    
    <div class="font-tester" contenteditable="true" spellcheck="false" style="font-family: 'EB Garamond', serif; font-size:65pt;">
abc 123
    </div>
  
</div>
  
  <script>      
    $("#tester-figures").change(function() {
        $('.font-tester').css("font-feature-settings", $(this).val());
    });
    
    $("#tester-smcp").change(function() {
        $('.font-tester').css("font-feature-settings", $(this).val());
    });
    
  </script>

最佳答案

有很多方法可以解决一个任务。另外这里是一个替代解决方案,它具有越来越少的简单化和代码。
它仅适用于将更改事件添加到两个选择的一个函数。在更改时,它从两个选择中读出实际值,并根据两个选择的实际值构建一个简单的 css 字符串。

$('#tester-figures').add('#tester-smcp').each( function(){
    const $this = $(this);
    $this.change(function(){

        let actualVals = {};
        actualVals.TesterFigures = $('#tester-figures').val();
        actualVals.TesterSmcp = $('#tester-smcp').val();                    
        
        let myVal = '';

        if('none' == actualVals.TesterFigures){
            myVal = 'none' == actualVals.TesterSmcp  ?  '' : actualVals.TesterSmcp;
        }else {
            myVal = 'none' == actualVals.TesterSmcp  ?  actualVals.TesterFigures : actualVals.TesterFigures + ', ' + actualVals.TesterSmcp;
        }

        $('.font-tester').css("font-feature-settings", myVal);

    });

});

注意:我没有使用过 css 属性 font-feature-settings然而。所以我对这个特殊元素没有任何经验。我注意到的是,选择中的字符串(即 'frac' 1 )发生了变化。将 css 添加到 html 元素时,内部引号和数字会丢失。但是没有它们,这种风格仍然有效。如果你只使用 frac,也许你喜欢检查它是否有效和 smcp在您的选择中。在实际 FF 中它有效;-)

关于javascript - 有选择地添加和删除相同 CSS 属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66203350/

相关文章:

html - :hover on a div with a border radius

javascript - 是否可以使用 props 克隆 jquery DOM 对象?

javascript - 在 600 长度后检查最近的点 (".") 然后删除点后的所有文本

javascript - 无法在 d3.js 中的同一页面上生成两个饼图

JQuery Validate - 使用函数重置表单,resetForm() 不起作用

javascript - 从 javascript 调用 bean 函数

javascript - 使用 onclick 按钮在 Javascript 中添加输入字段

javascript - 为什么 JSON 不支持 NaN 时 MongoDB 允许 NaN 值?

javascript - 如何更改 Javascript 中变量的颜色?

javascript - 如何检索输入框中的值以用于我的函数?