Did you contribute this back to the Metadata community?

----- Original Message ----
From: Diego A. <[EMAIL PROTECTED]>
To: jquery-en@googlegroups.com
Sent: Friday, April 6, 2007 3:54:52 PM
Subject: [jQuery] Re: IE XML parsing problem



I've been fighting with this bug too and I believe I've found the fix.
I can't be 100% sure, but I believe the problem was in the jquery.metaData
plugin.
The fix has worked for me and 2 other people so far...

Here is the fix I posted on my blog, hope it helps. And if it does work for
you, then this is definitely what's been driving so many people crazy!

http://fyneworks.blogspot.com/2007/04/fix-for-jquery-bug-in-ie-working-with.html

= Fix for jQuery bug in IE - Working with XML documents =

It's been driving me crazy and I'm not alone (1, 2). But I've finally
managed to fix the weird jQuery bug in IE when working with XML documents
(or so I hope).

The bug isn't in jQuery itself, it's in the very popular Metadata plug-in,
used to load meta data and settings from elements using the class property.

The Error: Lines 101 - 105 in the Metadata plugin.
 if ( $.meta.single )
    this[ $.meta.single ] = data; // Throws error on XML documents in IE
 else
    $.extend( this, data ); // Throws error on XML documents in IE
 
 this.metaDone = true; // Throws error on XML documents in IE


The fix: Find lines 75-77 in the Metadata plugin:
 $.fn.setArray = function(){
    return setArray.apply( this, arguments ).each(function(){
       if ( this.metaDone ) return;

And make the following change: (add line)
 $.fn.setArray = function(){
    return setArray.apply( this, arguments ).each(function(){
       try{ this['meta']=null; }catch(e){ return; } // Detect and trap error
       if ( this.metaDone ) return;

And that's it! This fix will allow Metadata to do what it does on HTML
elements and not throw that obscure "Object doesn't support this property or
method" error in Internet Explorer.


Angelo Sozzi wrote:
> 
> Hi,
> 
> I've managed to finish my first plugin and re-learn javascript at the same
> time. So I'm not quite sure if this is a Javascript or jQuery issue.
> 
> The plugin loads external content from HTML or XML data using an AJAX call
> to the file name generated from the LI element clicked.
> DEMO: http://www.sozzi.cn/jquery/fish.fn.trial3.html
> 
> It works perfectly for the HTML variant but the XML fails in IE throwing a
> " Object doesn't support this property or method" error.
> It seems to happen in the XML call and parse function on the line finding
> the "link" within the XML object:
> 
> (snip)...
> $.get(XMLurl, function(xml){
>             $("site", xml).each(function(){          // step through each 
> 'site'
> xml node
>             $(this).find("link").each(function(){ // find 'link' insidet the 
> 'site' node and turn it into html
>                 settings.parsedXML += "<div class='link'> "+$(this).text()+" 
> ";
> ....(snip)
> 
> Any thoughts on what I'm doing wrong?
> 
> 
> 
> js:
> /*
>  * AZlinker 0.4 Beta
>  * By Angelo Sozzi (http://www.sozzi.cn/jQuery)
>  * A jQuery plugin that will load XML or HTML links into divs
>  * by maping the UL>LI element names to filenames 
>  * Demo at http://www.sozzi.cn/jQuery/a_zlink.html
>  */
> 
> $.fn.AZlinker = function(settings) {
>      var settings = $.extend({
>         targetID: "#xml_here",
>         elemname: "li",
>         methodXML: true,
>         parsedXML: ""
>      }, settings || {}); // overwrite settings if there are any given in
> the function call
>   // other plugin code
>   $("#busy").hide();
>   var list = $(this).find(settings.elemname)
>   list.hover(
>         function(){ $(this).next().addClass("medium");
>                 $(this).prev().addClass("medium");
>                 $(this).addClass("large");},
>         function(){ $(this).next().removeClass("medium");
>                 $(this).prev().removeClass("medium");
>                 $(this).removeClass("large");}
>             );
>     // make clicked li active, read html and use to retrieve html or xml
>         list.click(function(){        //Add an OnClick event to all <li>
>         list.removeClass("active");   //OnClick Remove the active class from 
> all
> li  
>         $(this).addClass("active"); //Add class=active to clicked li
>         if (settings.methodXML){
>             var XMLurl = "xml/"+$.trim($(this).text())+".xml";  //Read out 
> text
> from litext li and make filename from it
>             loadXML(XMLurl);
>             }
>         else {
>         HTMLurl = "html/"+$.trim($(this).text())+".html"; //read out text from
> litext li and make filename from it
>         $(settings.targetID).load(HTMLurl);        //trim is used because 
> text leaves
> a space in IE
>             }
>         });    
> // Helper funtions 
> // The Ajax XML call and parsing to html
>     function loadXML(XMLurl){
>         settings.parsedXML="";
>             $.get(XMLurl, function(xml){
>             $("site", xml).each(function(){          // step through each 
> 'site'
> xml node
>             $(this).find("link").each(function(){ // find 'link' insidet the 
> 'site' node and turn it into html
>                 settings.parsedXML += "<div class='link'> "+$(this).text()+" 
> ";
>                 }).end().find("description").each(function(){
>                 settings.parsedXML += $(this).text()+ " </div>";
>                 });    
>             $(settings.targetID).html(settings.parsedXML);
>             });
>         });
>     };
>     // don't break the chain
>     return this;
>   }; // end jQuery plugin
> 

-- 
View this message in context: 
http://www.nabble.com/IE-XML-parsing-problem-tf2469241s15494.html#a9879395
Sent from the JQuery mailing list archive at Nabble.com.




Reply via email to