- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 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)。
我只是想知道是否可以按照我喜欢的方式拥有它。
最佳答案
不,没有 CSSOM API 可以通过选择器字符串获取规则(或规则列表)。迭代它们以找到一个是唯一的方法。当然,您不会在每次调用 fxSwitchLanguage 函数时都执行此操作,但在其外部,仅在加载脚本时执行一次。然后只需将相关规则的引用存储在一些常量或数据结构中即可。
但是由于您的目标是通过 JavaScript 操作规则,因此我会更进一步,使用 JavaScript 创建它们。这样,您就可以轻松存储对它们的引用,而无需迭代。
const {sheet} = document.getElementById('languages');
const rules = new Map(['eng', 'ita', 'esp'].map(lang => {
const rule = sheet.cssRules[sheet.insertRule(`.lang-${lang} {
display: none;
}`)]; // yes, it's weird, `insertRule` returns an index
return [lang, rule];
}));
let active = null;
function fxSwitchLanguage(l) {
if (active) rules.get(active).style.display = 'none';
rules.get(l).style.display = 'block';
active = l;
} // or build a toggle or whatever
<style id="languages">
</style>
<button onClick="fxSwitchLanguage('ita');">ITA</button>
<button onClick="fxSwitchLanguage('eng');">ENG</button>
<button onClick="fxSwitchLanguage('esp');">ESP</button>
<br>
<div class="lang-ita">CIAO!</div>
<div class="lang-eng">HELLO!</div>
<div class="lang-esp">HOLA!</div>
关于javascript - 有没有办法使用规则名称指向 document.styleSheets[].cssRules[] ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57678626/
我正在尝试使用 JavaScript 获取所有 CSS 规则。在某些页面上我成功了,在某些页面上我没有成功。 例如,在 StackOverflow 中,我使用的是: console.log( docu
我有这个非常简单的 HTML 页面,我正在尝试获取 #poulet 的 CSSRules,但是当我访问 documents.styleSheets[0].cssRules 时,我在 Chrome v5
借助此答案 (get all css classes background & color properties values),我可以获得所有 CSS 类背景和颜色属性值。它在我使用内部 CSS 代
当我尝试访问外部域上托管的某些 CSS 文件时,我在 Firebug 中收到此错误: Security error" code: "1000 rules = styleSheets[i].cssRul
有没有办法检查 CSS 选择器(通过 document.styleSheets[666].rules[1984].selectorText 获得)是否匹配特定元素? 我要求一个跨浏览器的纯 javas
我在我的 Wordpress 网站的自定义 javascript 中使用这个函数。 var addRule = (function (sheet) { if(!sheet) return;
此脚本包含在包含任何已声明样式(不包括由 style="" 设置的样式)的 HTML 文档中时,会将优化的样式表输出到页面。该脚本使用以下方法... 忽略任何 @ 或 : 规则以保留响应式样式。 将规
这实际上不需要太多内容,因为代码本身是不言自明的。但是,只需要逃避写这个上下文的条件。如何如何通过更改样式表的 cssRule 的 cssText 来更新样式元素的 innerHTML? HTML:
我尝试使用 $.cssRule() plugin并发现在 FireBug 中调试这些规则很不方便,因为每个规则似乎都附加到我页面上加载的每个 css 文件,因此定义了很多次。 Source code表
我想动态更改页面上某些文本的 CSS 样式(背景颜色)。为此,我正在尝试更改 CSSRule。由于所需样式存在大约 10 个 CSSRule,因此我正在使用 selectedText 访问所需的 CS
我想使用 Javascript 更改特定的类属性值,但通过类名本身而不是使用任何整数作为指针 (cssRules[i]) 或循环所有类以查找匹配的“selectorText”值. 这是为了更改页面内可
有什么区别: document.styleSheets[0].cssRules 和 document.styleSheets[0].rules 我注意到 IE8 和更早版本也支持第二个。但是这两个对象
我的 chrome 扩展程序需要修改用户页面上的某些 css 规则。通过 document.styleSheets 访问样式只能访问从同一域内链接的样式。 document.styleSheets 数
如何检查 document.styleSheets[i] 对象中是否存在属性 cssRules? 我发现我无法使用 if ( sheets[i].hasOwnProperty("cssRules")
CSSRule DOM interface包含对应于每种类型的 CSS 规则的常量。规则的类型可以用像这样的语句来测试 someRule.type == CSSRule.STYLE_RULE 我正在使
我有一个样式标签,其 css 属性添加了 insertRule功能。 我尝试了 Element.cloneNode(tree),但它不包含 cssRules // Add a style tag to
显然在 JavaScript 中,我们可以通过执行以下操作来查找整个文档的所有 CSS 规则: - document.styleSheets[0].rules || document.styleShe
当我检查网站时, 我从 document.styleSheets[x].cssRules 中看到了 cssRules 但是,对于这个网站 stackoverflow.com,当我使用 Chrome 浏
我需要更改现有的全局 CSS 规则,然后我访问 document.styleSheets,获取我的规则并修改它。 我通过访问 selectorText 属性修改选择器。 CSS代码 .cla
代码如下: http://jsfiddle.net/salman/2hyYg/ http://jsfiddle.net/salman/2hyYg/show/ 您会注意到 alert(document.
我是一名优秀的程序员,十分优秀!