Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Removing <link> element with jQuery?

I don't want to use styles from style.css, so I decided to remove style.css from DOM. This work just fine in Firefox and IE8, but not in IE6:

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

Any other solution, with jQuery?


Here is example:
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>

And here is CSS (style.css):

#content {
    background-color:#333;
}

Only in IE #content is still dark. :(
Maybe is jQuery bug?

like image 1000
sasa Avatar asked Jun 08 '09 12:06

sasa


People also ask

How to remove the HTML element using jQuery?

jQuery remove() Method The remove() method removes the selected elements, including all text and child nodes. This method also removes data and events of the selected elements. Tip: To remove the elements without removing data and events, use the detach() method instead.

How to remove form attribute in jQuery?

The removeAttr() method is an inbuilt method in jQuery which is used to remove one or more attributes from the selected elements. Parameters: This function accepts single parameter attribute which is mandatory. It is used to specify one or more attributes to remove.

How do you remove a href?

We can remove the href by: Setting an empty href – ELEMENT. href = "" Or removing it entirely – ELEMENT.

How do you make an anchor link not clickable or disabled?

In order to disable an HTML Anchor Link (HyperLink), the value of its HREF attribute is copied to the REL attribute and the value of HREF attribute is set to an empty JavaScript function. This makes HTML Anchor Link (HyperLink) disabled i.e. non-clickable.


3 Answers

This is not a bug in jQuery, it is a bug (or possibly, a feature) of the IE rendering engine.

It seems this problem is being caused by the fact that Internet Explorer does not correctly re-render the page after removing the LINK element from the DOM.

In this particular case, the LINK tag is no longer present at the DOM, but IE still displays the CSS that has been loaded into memory.

A workaround / solution for this is to disable the stylesheet using the .disabled property like this:

// 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;

EDIT in reply to your comment:

Or, if you want to remove it by the href use the following code:

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;
    }
}
like image 96
Aron Rotteveel Avatar answered Oct 12 '22 05:10

Aron Rotteveel


Perhaps it's something strange IE6 does to URL in the href attribute? Try something like:

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

(i.e. check whether the href value contains "style.css")

It's just a guess, however. If that doesn't work, I recommend checking the JQuery documentation closely on the subject of attribute selectors and the remove method.

Also keep in mind that it's also not impossible that it's in fact a bug. (IE6 in general causes lots of issues involving JavaScript and DOM manipulation, among other things.)

like image 31
Noldorin Avatar answered Oct 12 '22 05:10

Noldorin


Topic's quite old, but You can only add ID to your link element, and delete it by element:

$("#id").remove();
like image 31
Sebastian Koziara Avatar answered Oct 12 '22 05:10

Sebastian Koziara