使用 JavaScript/jQuery 删除或替换样式表(<link>)

IT技术 javascript jquery css
2021-02-06 02:54:27

我怎样才能做到这一点?

我试过

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

尽管该元素已被移除,但样式仍会应用于当前页面(在 Opera 和 Firefox 中)。

有没有其他办法?

6个回答

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

这也适用于跨浏览器。

例如

document.styleSheets[0].disabled = true;

//所以在你的情况下使用jquery试试

$('link[title=mystyle]')[0].disabled=true;
不错的redsquare,我不知道这个。欢迎回来,顺便说一句。
2021-03-13 02:54:27
这不再是事实;现在在未来(7 年后)删除链接标签就足够了
2021-03-23 02:54:27
如今,“jQuery 方式”看起来像 $('link[title=mystyle]').prop('disabled',true);
2021-03-28 02:54:27
@karim79,谢谢,忙碌而无聊。现在找回了错误!
2021-04-04 02:54:27
$('link[title=mystyle]')[0].disabled=true;不适合我,但$('link[id=mystyle]')[0].disabled=true;工作。我不得不使用 id 而不是标题。
2021-04-06 02:54:27

我设法做到了:

$('link[title="mystyle"]').attr('disabled', 'disabled');

似乎这是从内存中删除样式的唯一方法。然后我补充说:

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

也删除元素。

要禁用您选择的样式表:

$('link[title="mystyle"]').prop('disabled', true);

如果您不想再次应用该样式表,则.remove()可以。但是,如果您想稍后重新启用它,请不要这样做。

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

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

在上面的代码中,重要的是使用.prop,而不是.attr如果您使用.attr,代码将在某些浏览器中工作,但不适用于 Firefox。这是因为,根据MDNdisabled所述的属性HTMLLinkElementDOM对象,但不是所述的一个属性link的HTML元素。使用disabled作为HTML属性是非标准的。

没有 jQuery 解决方案

如果您可以将 id 添加到您的链接标签

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

document.getElementById("styles-animations").disabled = true;

如果您知道 css 文件在文档中的索引位置

document.styleSheets[0].disabled = true; // first
document.styleSheets[document.styleSheets.length - 1].disabled = true; // last

如果要按名称禁用样式,可以使用此功能

/**
 * @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;
        }
    }
};

注意:确保样式文件名是唯一的,这样您就没有“dir1/style.css”和“dir2/style.css”。在这种情况下,它只会禁用第一种样式。

使用纯javascript:

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