用jQuery删除<link />元素?

时间:2009-06-08 12:19:16

标签: javascript jquery css dom

我不想使用style.css中的样式,所以我决定从DOM中删除style.css。这在Firefox和IE8中运行得很好,但在IE6中却没有这样做:

$("LINK[href='http://www.example.com/style.css']").remove();

任何其他解决方案,使用jQuery?


这是一个例子:
HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Testing</title>
<script type="text/javascript" src="path/to/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
    $("link[href*='style.css']").remove();         
});
</script>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<div id="content">...</div>
</body>
</html>

这是CSS(style.css):

#content {
    background-color:#333;
}

仅在IE中#content仍然是黑暗的。 :(
也许是jQuery bug?

4 个答案:

答案 0 :(得分:20)

这不是jQuery中的错误,它是IE呈现引擎的错误(或可能是一个功能)。

看来这个问题是由于从DOM中删除LINK元素后Internet Explorer无法正确重新呈现页面这一事实。

在这种特殊情况下,DOM上不再存在LINK标记,但IE仍显示已加载到内存中的CSS。

解决方法/解决方案是使用.disabled属性禁用样式表,如下所示:

// following code will disable the first stylesheet
// the actual DOM-reference to the element will not be removed; 
// this is particularly useful since this allows you to enable it
// again at a later stage if you'd want to.
document.styleSheets[0].disabled = true;

编辑回复您的评论:

或者,如果您想通过href删除它,请使用以下代码:

var styleSheets = document.styleSheets;
var href = 'http://yoursite.com/foo/bar/baz.css';
for (var i = 0; i < styleSheets.length; i++) {
    if (styleSheets[i].href == href) {
        styleSheets[i].disabled = true;
        break;
    }
}

答案 1 :(得分:9)

也许IE6对href属性中的URL做了什么奇怪的事情?尝试类似:

$("LINK[href*='style.css']").remove();

(即检查href是否包含“style.css”)

然而,这只是猜测。如果这不起作用,我建议关于属性选择器和remove方法的主题密切检查JQuery文档。

还要记住,它实际上也是一个错误并非不可能。 (IE6通常会导致许多涉及JavaScript和DOM操作的问题,等等。)

答案 2 :(得分:4)

主题很旧,但您只能在链接元素中添加ID,并按元素删除它:

$("#id").remove();

答案 3 :(得分:0)

也许在标签名称上使用小写?