javascript - 有没有办法使用规则名称指向 document.styleSheets[].cssRules[] ?
问题描述
我想使用Javascript更改特定的类属性值,但是通过类名本身而不是使用任何整数作为指针(cssRules [i])或循环所有类以找到匹配的“selectorText”值。
这是为了更改页面中可读的屏幕语言。
<style id="languages" class="languages" title="languages">
<!--
/* ... more styles ... */
.lang-ita { display : none; }
.lang-eng { display : none; }
/* ... more styles ... */
-->
</style>
<script language="javascript">
<!--
function fxSwitchLanguage(i)
{
/* ... more code ... */
document.getElementById('languages').sheet.cssRules[i].style.setProperty('display','block');
/* ... more code ... */
}
-->
</script>
<button onClick="fxSwitchLanguage(0);">ITA</button>
<button onClick="fxSwitchLanguage(1);">ENG</button>
<br>
<div class="lang-ita">CIAO!</div>
<div class="lang-eng">HELLO!</div>
当然,在只显示新选择的语言之前,我将以前的语言“显示”设置为“无”。
我想要“.cssRules['.lang-eng']”而不是“.cssRules[i]”。
由于这个文档是共享的并且可能被其他人更改,出于明显的稳定性原因,我真的更喜欢使用它的名称而不是任何硬编码的整数来指向类,而且我不想使用“for”循环来测试每个书面类的“selectorText”属性(可以很容易地达到数千个)。
我不介意任何浏览器差异(.cssRules 或 .rules)。
我只是想知道是否有可能以我喜欢的方式拥有它。
解决方案
从这里的评论是这个想法:
function fxSwitchLanguage(varlang) {
//* test if already created and remove it before update*/
if (document.contains(document.getElementById("langSetting"))) {
document.getElementById("langSetting").remove();
}
//* update language chosen*/
var newStyle = document.createElement("style");
newStyle.setAttribute("id", "langSetting"); //* put a mark on it */
var addContent = ".lang-" + varlang + "{display:block;}";
newStyle.appendChild(document.createTextNode(addContent));
var head = document.getElementsByTagName("head")[0];
head.appendChild(newStyle);
}
[class^='lang'] {display:none;}
<button onClick="fxSwitchLanguage('ita');">ITA</button>
<button onClick="fxSwitchLanguage('eng');">ENG</button>
<hr>
<p class="lang-ita">CIAO!</p>
<div class="lang-eng">HELLO!</div>
推荐阅读
- forms - 如何将输入发送到 servlet 但不从动作发送?
- react-native - React Native:如何完全删除 Instabug?
- python-3.x - 迭代列表中的矩阵在 numpy 中停止
- node.js - 是否可以抑制 NPM 对其正在运行的命令的回显?
- java - 如何修复 org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:u
- azure - Azure 弹性池和容量 DatabaseCapacityMax 属性的含义
- python - 从频谱图时间/频率序列数组中获取 MFCC
- python-3.x - Pine-Script to Python 为什么转换后的“On Balance Volume -OBV 指标”与 TradingView 图表值不匹配
- c# - 有没有办法在不更改子表中的引用名称的情况下更改父表名称?
- yaml - BadSchemaError:如何验证 Python/Tavern 的 YAML 模式