Ticket #4365 (closed bug: invalid)
prototype's getElementsByClassName causes jQuery error
| Reported by: | mcologne | Owned by: | mcologne |
|---|---|---|---|
| Priority: | low | Milestone: | 1.3.2 |
| Component: | core | Version: | 1.3.2 |
| Keywords: | Cc: | ||
| Blocking: | Blocked by: |
Description
hi,
i have problems using jQuery.noConflict() and firefox 2.
my firefox version: pc firefox 2.0.0.20 the same with mac firefox 2.0.0.4
i'm using only the first example from http://docs.jquery.com/Using_jQuery_with_Other_Libraries
it doesn't work, the following errors occur in firebug:
Security error" code: "1000 jQuery(document).ready is not a function
what shall i do? anybody an idea if this is a bug?
best regards m
code i use below
<!DOCTYPE html PUBLIC "-W3CDTD XHTML 1.0 TransitionalEN" " 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>Unbenanntes Dokument</title> <script src=" http://www.prototypejs.org/javascripts/prototype.js"></ script>
<script src="../scripts/jquery/jquery-1.3.2.js"></script> <script>
jQuery.noConflict();
Use jQuery via jQuery(...) jQuery(document).ready(function(){
jQuery("div").hide();
});
Use Prototype with $(...), etc. $('someid').hide();
</script>
</head>
<body> </body> </html>
Attachments
Change History
comment:2 Changed 4 years ago by crutchfield
I was able to get around this issue by adding a try/catch block around the offending code.
try {
if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){
var div = document.createElement("div");
div.innerHTML = "<div class='test e'></div><div class='test'></div>";
// Opera can't find a second classname (in 9.6)
if ( div.getElementsByClassName("e").length === 0 )
return;
// Safari caches class attributes, doesn't catch changes (in 3.2)
div.lastChild.className = "e";
if ( div.getElementsByClassName("e").length === 1 )
return;
Expr.order.splice(1, 0, "CLASS");
Expr.find.CLASS = function(match, context, isXML) {
if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
return context.getElementsByClassName(match[1]);
}
};
})();
} catch(e) {
// If using prototype + FF2.0 this block will fail, catching the exeception and moving on
// as FF2.0 shouldn't natively have getElementsByClassName defined
}
Changed 4 years ago by yc_hsu
-
attachment
jquery-1.3.2.js
added
Inserted new code on line 2236 and 2256 to temporarily yield $ in case getElementsByClassName is overridden by Prototype which needs its own $.
comment:4 Changed 4 years ago by dmethvin
- Component changed from unfilled to core
- Summary changed from unable to use jQuery.noConflict() and firefox 2 to prototype's getElementsByClassName causes jQuery error
comment:6 Changed 3 years ago by SlexAxton
- Owner set to mcologne
- Priority changed from major to low
- Status changed from new to pending
Anyone still having issues with noConflict?
comment:9 Changed 3 years ago by trac-o-bot
- Status changed from pending to closed
- Resolution set to invalid
Automatically closed due to 14 days of inactivity.
comment:10 Changed 15 months ago by anonymous
this is still a current issue, reopen please.
comment:11 Changed 15 months ago by rwaldron
Please follow the bug reporting guidlines and use jsFiddle when providing test cases and demonstrations instead of pasting the code in the ticket.

I can replicate this issue. I merged 1.3.2 back to 1.3.1(which works fine) and the change that is causing this issue is around line 2231 of jquery-1.3.2.js. Specifically I think it is due to Firefox 2.0.0.20 crashing when div.getElementsByClassName() is called on line 2236. Perhaps this is due to getElementsByClassName() being overridden by prototype?