2009-06-02 13 views
0

Ich bin mit einem XML-Knoten der folgenden Struktur arbeiten:jquery IE8 Selektor bizarreness

<CF> 
    <T> 
     <TX>title</TX> 
     <em>15:2:</em> 
    </T> 
    <KW> 
     <TX>SOMETHING ELSE</TX> 
    </KW> 
    <!-- OTHER TAGS, SOME OF WHICH HAVE A <TX> CHILD --> 
</CF> 

Dinge funktionieren mehr oder weniger wie ich in Firefox erwarten würde, aber ich bin immer seltsame Verhalten in IE8. Zum Beispiel die folgenden mir ein jquery Objekt der Länge gibt 14:

jQuery("T TX", xmlDoc).length 

, wo es nur eine sein sollte (die „CF“ Tag enthält nur ein „T“ -Tag, die wiederum nur ein „TX“ enthält Etikett).

auf die Fremdheit Hinzufügen, wenn ich das „T“ aus dem Wähler entfernen, wie in der folgenden:

jQuery("TX", xmlDoc).length 

ich WENIGER, eher als eine gleiche oder größere Anzahl von Ergebnissen (die Länge des jquery Objekt ist 12).

Also die erste Frage ist: wenn es nur ein TX-Tag gibt, und es hat nur ein "T" -Tag, warum findet jquery 14 "TX" -Tags, die Nachkommen eines "T" sind?

Die zweite Frage ist: Wenn ich den Selektor vereinfachen, entfernen Sie das "T", warum bekomme ich weniger, anstatt mehr Ergebnisse?

Mache ich etwas falsch oder bin ich auf einen Fehler gestoßen?

Antwort

0

Es gibt 14 Zeichen in "<TX> Titel </TX >". Da ich nicht weiß, wie viele tatsächliche TX-Elemente es gibt, konnte ich nicht sagen, ob die 12 von der zweiten Abfrage die Anzahl der TX-Elemente im Dokument ist.

Art von verrückt und von der Wand ... aber perhapse die Länge Eigenschaft nicht zurück, was Sie denken, dass es zurückkehrt?

+0

Jrista, interessante Theorie (und beeindruckende Beobachtung!), Aber "Titel" ist nur Beispieltext. Im realen XML-Dokument ist der Text länger. – morgancodes

+0

lol ... Ich musste es versuchen ... es war das einzige nicht offensichtliche Ding, das ich sehen konnte. Können Sie das gesamte Dokument posten? Es könnte mehr Informationen geben, die mit mehr Daten erfasst werden könnten ... – jrista

1

Vielleicht können Sie so etwas wie dies versuchen:

jQuery('T', mydoc).find('TX').length 

und sehen, was passiert,

0

Es scheint nicht-HTML-Tags in IE8 mit jQuery ein Problem zu sein mit Parsen. Ich bin gerade auf this discussion gestolpert, wo die vorgeschlagene Antwort ist, Microsoft.XMLDOM zu verwenden, um Ihr DOM-Objekt aus dem XML zu erstellen. Hier ist der Schlüssel Teil:

xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
xmlDoc.async="false"; 
xmlDoc.loadXML(text); 

Ich versuchte dies und es behoben einige Probleme, die ich mit IE8 mit hatte, als XML-Bau docs von Strings ($() und .find $ wurden nicht alles zurück, nur um $. Filter würde funktionieren).

Update: Sie könnten stattdessen $ .parseXML() betrachten.