#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: | ||
Blocked by: | Blocking: |
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 (1)
Change History (11)
comment:1 Changed 14 years ago by
comment:2 Changed 14 years ago by
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 14 years ago by
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 14 years ago by
Component: | unfilled → core |
---|---|
Summary: | unable to use jQuery.noConflict() and firefox 2 → prototype's getElementsByClassName causes jQuery error |
comment:6 Changed 13 years ago by
Owner: | set to mcologne |
---|---|
Priority: | major → low |
Status: | new → pending |
Anyone still having issues with noConflict?
comment:9 Changed 13 years ago by
Resolution: | → invalid |
---|---|
Status: | pending → closed |
Automatically closed due to 14 days of inactivity.
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?