【问题标题】:losing style when change css file by js通过js更改css文件时丢失样式
【发布时间】:2018-10-14 20:36:54
【问题描述】:

我有一个这样的页面

所以我试图在单击按钮时通过 js 更改 CSS

这是我的js代码

this.document.getElementById('style-bandle').setAttribute('href','./assets/demo/default/base/style.bundle.rtl.css');

所以当我点击按钮时,CSS 文件发生了变化,但是在加载新文件 CSS 之前,我会丢失样式

CSS加载后页面返回第一张带样式的图片,如何避免这种加载样式?

【问题讨论】:

  • 也许你可以追加一个新的 元素而不是替换它并尝试直接覆盖旧样式。但我不确定这是否可行:)
  • 我试过了,但是如果这两个文件同时存在就不能正常工作
  • 在您的 css 文件中创建具有样式的类,然后使用 jquery 或 javascript 在您的元素中添加这些类,并在不需要时删除它们。查阅这些链接api.jquery.com/addclassw3schools.com/howto/howto_js_add_class.asp

标签: javascript html css angularjs


【解决方案1】:

如果您使用的是AngulerJS,您可以简单地使用它并从页面控制器更改链接标签的href:

<link rel="stylesheet" data-ng-if="filePath " data-ng-href="{{ filePath }}" />

ng-if 属性之所以存在,是因为需要执行脚本才能在“filePath”变量中有一个值,同时我们隐藏了&lt;link&gt;。您也可以尝试为 href 设置一个默认值。

然后,对于您的按钮,您可以使用ng-click 属性而不是onclick 来调用控制器中的函数。

控制器中的代码应如下所示:

myModule.controller('myController', ['$scope', function($scope) {
   $scope.filePath = 'pathToYourDefaultCSS.css';
   $scope.changeToDark = function() {
       $scope.filePath = './assets/demo/default/base/style.bundle.rtl.css';
   }
}]);

【讨论】:

  • 这是个好主意,但我使用的是 angular 6 而不是 1,所以我会在 angular 6 中搜索这个想法
猜你喜欢
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 2014-09-29
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多