使用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解决方案