Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript/jQuery删除或替换样式表(链接)_Javascript_Jquery_Css - Fatal编程技术网

使用JavaScript/jQuery删除或替换样式表(链接)

使用JavaScript/jQuery删除或替换样式表(链接),javascript,jquery,css,Javascript,Jquery,Css,我该怎么做 我试过了 $('link[title=“mystyle”]')。删除(); 尽管删除了元素,但样式仍然应用于当前页面(在Opera和Firefox中) 还有其他方法吗?为了适应ie,您必须将样式表设置为禁用,因为它将css样式保留在内存中,因此删除该元素将不起作用,如果我没有记错的话,在某些情况下还可能导致它崩溃 这也适用于跨浏览器 e、 g //因此,在使用jquery的情况下,请尝试 $('link[title=mystyle]')[0].disabled=true; 我设法

我该怎么做

我试过了

$('link[title=“mystyle”]')。删除();
尽管删除了元素,但样式仍然应用于当前页面(在Opera和Firefox中)


还有其他方法吗?

为了适应ie,您必须将样式表设置为禁用,因为它将css样式保留在内存中,因此删除该元素将不起作用,如果我没有记错的话,在某些情况下还可能导致它崩溃

这也适用于跨浏览器

e、 g

//因此,在使用jquery的情况下,请尝试

$('link[title=mystyle]')[0].disabled=true;

我设法做到了:

$('link[title="mystyle"]').attr('disabled', 'disabled');
这似乎是从记忆中删除样式的唯一方法。 然后我补充说:

$('link[title="mystyle"]').remove();

也要删除元素。

要禁用选定的样式表:

$('link[src="<path>"]').remove();
$('link[src="<path>"]').attr('src','<NEW_FILE_PATH>');
$('link[title=“mystyle”]').prop('disabled',true);
如果您永远不想再次应用该样式表,那么可以使用它。但是,如果您希望以后能够重新启用它,请不要这样做

要重新启用样式表,请执行以下操作(只要您没有删除样式表的元素):

$('link[title=“mystyle”]').prop('disabled',false);

在上面的代码中,重要的是使用,而不是使用。如果您使用
.attr
,代码将在某些浏览器中工作,但在Firefox中不工作。这是因为,
disabled
link
HTML元素的属性,但不是属性。使用禁用的
作为HTML属性是不标准的。

要删除样式表:

$('link[src="<path>"]').remove();
$('link[src="<path>"]').attr('src','<NEW_FILE_PATH>');
$('link[src=”“])。删除();
要替换样式表,请执行以下操作:

$('link[src="<path>"]').remove();
$('link[src="<path>"]').attr('src','<NEW_FILE_PATH>');
$('link[src=”“]).attr('src','');
没有jQuery解决方案

如果您可以将id添加到链接标记中

<link rel="stylesheet" href="css/animations.css" id="styles-animations">

document.getElementById("styles-animations").disabled = true;
如果要按名称禁用样式,可以使用此函数

/**
 * @param [string]  [styleName] [filename with suffix e.g. "style.css"]
 * @param [boolean] [disabled]  [true disables style]
 */
var disableStyle = function(styleName, disabled) {
    var styles = document.styleSheets;
    var href = "";
    for (var i = 0; i < styles.length; i++) {
        href = styles[i].href.split("/");
        href = href[href.length - 1];

        if (href === styleName) {
            styles[i].disabled = disabled;
            break;
        }
    }
};
/**
*@param[string][styleName][filename,后缀为“style.css”]
*@param[boolean][disabled][true禁用样式]
*/
var disableStyle=函数(styleName,已禁用){
var styles=document.styleSheets;
var href=“”;
对于(变量i=0;i
注意:确保样式文件名是唯一的,这样您就没有“dir1/style.css”和“dir2/style.css”。在这种情况下,它将只禁用第一种样式。

使用纯javascript:

var stylesheet = document.getElementById('stylesheetID');
stylesheet.parentNode.removeChild(stylesheet);

这两个添加和删除都使用了其他一些帖子中提到的禁用原则,以防止跨浏览器问题。注意我的添加是如何检查工作表是否已经存在的,在这种情况下,它只是启用它。此外,与某些答案不同,这是为了使用.css文件的url作为函数的唯一参数(将客户端与
id
title
属性隔离开来)

ES6解决方案:

const disableStyle = styleName => {
  const styles = document.styleSheets;
  let href = "";
  for (let i = 0; i < styles.length; i++) {
    if (!styles[i].href) {
      continue;
    }
    href = styles[i].href.split("/");
    href = href[href.length - 1];
    if (href === styleName) {
      styles[i].disabled = true;
      break;
    }
  }
};
const disableStyle=styleName=>{
const styles=document.styleSheets;
让href=“”;
for(设i=0;i

disableStyle(“MyUnwantedFile.css”)一样使用它

如果只想使用href属性执行此操作:

$('link[href="https://example.com/mycss.css"]').remove()

漂亮的红方块,我不知道这件事。欢迎回来,顺便说一句。@karim79,谢谢,一直很忙,很无聊。现在虫子回来了!现在,“jQuery方式”看起来像
$('link[title=mystyle]').prop('disabled',true)这不再是真的;现在在未来(7年后)删除链接标签就足够了('link[title=mystyle]')[0].disabled=true不适合我,但是
$('link[id=mystyle]')[0].disabled=true工作。我必须使用id而不是title.stuff,比如
$('link[title=“mystyle”]”)。remove()现在可以工作了,这是旧浏览器的问题(几年前提出这个问题时),感谢您证明了ES6解决方案