Удалить элемент <link> с помощью jQuery?

Я не хочу использовать стили из style.css, поэтому я решил удалить style.css из DOM. Это прекрасно работает в 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?

4 ответа

Решение

Это не ошибка в jQuery, это ошибка (или, возможно, особенность) движка рендеринга IE.

Кажется, эта проблема вызвана тем фактом, что Internet Explorer неправильно корректирует визуализацию страницы после удаления элемента LINK из DOM.

В этом конкретном случае тег LINK больше не присутствует в DOM, но 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;
    }
}

Возможно, это что-то странное, что IE6 делает с URL в href атрибут? Попробуйте что-то вроде:

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

(т.е. проверьте, является ли href значение содержит "style.css")

Однако это всего лишь предположение. Если это не сработает, я рекомендую внимательно проверить документацию JQuery на тему селекторов атрибутов и remove метод.

Также имейте в виду, что это также не невозможно, что это на самом деле ошибка. (IE6 в целом вызывает множество проблем, включая JavaScript и манипулирование DOM, между прочим.)

Тема довольно старая, но Вы можете добавить только идентификатор к элементу ссылки и удалить его по элементу:

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

Может быть, использование строчных букв в имени тега?

Другие вопросы по тегам