在 CSS 中访问 JavaScript 变量

Posted

技术标签:

【中文标题】在 CSS 中访问 JavaScript 变量【英文标题】:Access JavaScript variable in CSS 【发布时间】:2015-09-08 23:57:00 【问题描述】:

以下是供参考的代码。变量“imgpath”的值在加载时更改。我需要为“icon1”类的背景图像分配这个新值。 我知道这可以使用 javascript/jQuery 来完成,但我需要一些方法来更新 CSS 本身中的这个值。 是否可以使用 Sass/Less 或任何其他方式?

<html>

<head>
    <style>
    .icon1 
        background: transparent url("imagepath1/icon1.png") no-repeat center center;
    </style>
</head>

<body>
    <a class="icon1"></a>
    <script>
    var imgpath = "imagepath1";
    if (setnewpath)
        imgpath = "imagepath2";
    </script>
</body>

</html>

感谢您的帮助!

【问题讨论】:

感谢您的回复,但我知道如何使用 javascript/jquery。但我需要知道是否可以使用 sass/less? 无法用css或sass访问javascript变量,可以考虑运行nodeJS。 【参考方案1】:

您无法在CSS 中访问Javascript

您可以使用css() 使用jQuery 设置css 属性。

$('.icon1').css('background-image', imgpath + '/icon1.png');

设置所有属性

$('.icon1').css('background', 'transparent url("' + imgpath + '/icon1.png") no-repeat center center');

css():

为一组匹配的元素设置一个或多个 CSS 属性。

【讨论】:

【参考方案2】:

我从W3cschool得到参考

document.getElementsByClassName('icon1').background = "transparent url(" +imgpath + "/icon1.png") no-repeat center center";

【讨论】:

【参考方案3】:

您不能从 css 访问 javascript,反之亦然。请参阅此代码:

document.getElementByClassName("icon").style.backgroundImage = "url('+imgpath + '/icon1.png')";

我更喜欢这个解决方案,而不是 Tushar 的,因为它可以独立运行。这么小的任务不需要 jQuery。

【讨论】:

【参考方案4】:

使用模型变量作为剃须刀,我认为可以接受:

<html>
  <head>
    <style>
    .icon1  background:transparent url(@Model.imgpath ) no-repeat center center;
    </style>
  </head>
  <body>
    <a class="icon1"></a>
    <script>
      var imgpath = "imagepath1";
      if(setnewpath)
        imgpath = "imagepath2";
    </script>
  </body>
</html>

【讨论】:

你能提供更多细节吗? 我假设你使用了asp.net mvc,你应该在模型中定义一个字符串类型变量(ieimagpath),然后你可以在控制器中获取值(或在控制器中调用服务),所以你可以使用剃刀语法“@Model.imagpath”让它工作。 不,没有 .net 涉及。这只是客户端 有服务器端处理吗?如果是纯js,可以在less中为dom定义一个类,用js修改。 你能举个例子吗?【参考方案5】:

幸运的是,样式表和规则实际上是暴露在 DOM 中的。

一种简单的方法是获取对元素的引用并将其 textContent 替换为全新的 CSS 源代码,内置于 JavaScript。不过,我不完全确定这是否真的有效。取决于浏览器是否会费心将新内容重新解析为新 CSS。

然而,应该工作的稍微复杂一点的方法是实际使用 StyleSheets 对象模型。

您可以通过var sheet = document.styleSheets[0];获取样式表

然后用var rule = sheet.cssRules[0];获取规则

然后您可以替换规则文本:rule.cssText = '.icon1 background:transparent url("'+imagepath+'") no-repeat center center;';

遗憾的是,API 并没有比一次性替换整个规则文本更细。

如果您愿意,您还可以删除规则并添加新规则,而不是就地更改文本。见https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet

【讨论】:

看起来很有趣。但正如你所说,可能存在浏览器限制。

以上是关于在 CSS 中访问 JavaScript 变量的主要内容,如果未能解决你的问题,请参考以下文章

通过 JavaScript 访问 CSS 自定义属性(又名 CSS 变量)

预编译

less中怎么访问javascript?

如何使用 JavaScript 检测 CSS 变量支持?

前端基础面试题(Html,css,Javascript)_2

JavaScript 开发进阶:理解 JavaScript 作用域和作用域链