javascript - 有选择地添加和删除相同 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中它有效;-)
推荐阅读
- php - Laravel dumpautoload url 格式错误
- javascript - 正则表达式替换字符串中不是数字或句点的任何内容
- amazon-ec2 - 如何将 statefulset 的数量迁移到 helm 图表
- ruby - 如何在远程服务器(由 pem 文件访问)rails 控制台上上传回形针图像?
- python - 获取具有特定上一个和下一个值的所有值
- javascript - 在多行字符串上使用八进制字符
- qt - Qt OpenGLWindow不渲染三角形
- ios - iOS:旋转后 UITextField 的 inputAccessoryView 没有更新
- php - 用 php 清除 mongoDB 集合,似乎不能永久工作
- solidity - 从另一个智能合约中读取可变大小的数据