Javascript 从网页中卸载CSS

Javascript 从网页中卸载CSS,javascript,Javascript,我想知道如何从页面中卸载CSS。e、 在我的页面中,我包含了一个名为a.css的文件。现在我希望用户能够更改主题,这是CSS驱动的,因此他/她应该能够卸载a.CSS,然后我可以加载b.CSS(否则它们会冲突) 你知道怎么做吗 var firstLink = document.getElementsByTagName('link')[0]; firstLink.parentNode.removeChild(firstLink) 这将删除页面上的第一个链接元素-不确定html是如何构造的,但我相信

我想知道如何从页面中卸载CSS。e、 在我的页面中,我包含了一个名为a.css的文件。现在我希望用户能够更改主题,这是CSS驱动的,因此他/她应该能够卸载a.CSS,然后我可以加载b.CSS(否则它们会冲突)

你知道怎么做吗

var firstLink = document.getElementsByTagName('link')[0];
firstLink.parentNode.removeChild(firstLink)
这将删除页面上的第一个链接元素-不确定html是如何构造的,但我相信您可以将其用作示例。如果type属性是“text/css”并且您的目标媒体(屏幕)正确,您可能需要检查该属性,或者如果您有其他非css引用的链接元素,则可能需要检查href是否在任何地方包含“css”


注意:您还可以将href属性重新设置为指向不存在的页面,而不是完全删除该元素。

使用link元素并禁用它

document.getElementsByTagName('link')[0].disabled = true; 

使用jquery时,这一点很有效:

$("link[href='fileToRemove.css']").remove();

显然,用要卸载的文件的相对路径和文件名替换fileToRemove.css。

奇怪的是,IE和firefox支持
disabled
属性,但Chrome、Safari和Opera都不支持它。因此,这应该是最跨浏览器的解决方案

// Disables a particular stylesheet given its DOM Element
function unload_stylesheet(DOMelement){
    DOMelement.disabled = true;
    DOMelement.parentNode.removeChild( DOMelement );
    DOMelement.href = "data:text/css,"; // empty stylesheet to be sure
}

// Usage:
unload_stylesheet( document.getElementsByTagName('link')[0] );

对link标记使用id不是更好吗?在link元素上设置id属性是不常见的,但我确信OP可能会希望做到这一点,减少对多个link元素的解析和处理。。好主意。不过我更喜欢你的解决方案,设置一个属性而不是完全删除它。我不知道怎么做,但ExtJS框架提供了此类功能,因此如果这里的解决方案不起作用,你可以在那里看看……我必须将文件名加引号以使其起作用,例如$([href='test.css'])。remove();如果不想放置路径,可以在等号前添加*号$(“link[href*='fileToRemove.css']);什么是jQuery?这是错误的,因为link标记不仅仅用于CSS。请参阅本页@cppferever Yes。但与此同时,这个答案仍然是有效的和有益的,因为它引导我们朝着正确的方向前进。如果需要,我们可以检查
href
rel
等的值。但是,这些操作只是实现细节。至少,我相信答案并不是你说的“错”。一个重要的警告是,
link
不支持
disabled
属性(请参阅)。事实上,它可能会工作,但这不是符合标准的。