2009-06-11 3 views
6

Ich erhalte inconsistant Ergebnisse in allen Browsern mit dem folgenden Test:Jquery Selector Fremdheit - ist das ein Fehler oder mache ich es falsch?

============ test.html ===========

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" 
    "http://www.w3.org/TR/html4/strict.dtd"> 

<html lang="en"> 
<head> 
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script> 
</head> 
<body> 
<script> 

var xml; 



$.ajax({ 
    type: "GET", 
    url: "data.xml", 
    success: function(data){ 
     var node = $("CI:first", data); 
     var query1 = $("T TX", node).length; 
     var query2 = $("T", node).find("TX").length; 


     var msg = '$("T TX", node).length: ' + query1; 
     msg += "\n"; 
     msg += '$("T", node).find("TX").length: ' + query2; 
     alert(msg); 
    } 
}); 


</script> 
</body> 
</html> 

============ data.xml ===========

<?xml version="1.0" encoding="ISO-8859-2"?> 
<CNs> 
    <CI> 
    <T> 
     <TX></TX> 
    </T> 
    </CI> 
    <CI> 
    <T> 
     <TX></TX> 
    </T> 
    </CI> 
    <CI> 
    <T> 
     <TX></TX> 
    </T> 
    </CI> 
</CNs> 

Was geschehen soll, ist dies:

  • xml Last über Ajax Anruf
  • wählen einen XML-Knoten: $("CI:first", data);
  • wählen einen Knoten innerhalb dieser Knoten: $("T TX", node)
  • Sekunden Auswahl nur mit einem "TX" tag

jedoch in IE6 und IE8 (haven‘kommen sollte t versuchte IE7), scheint die zweite Auswahl den "Knoten" -Kontext zu ignorieren und das gesamte XML-Dokument zu durchsuchen. Der Test läuft wie erwartet in FireFox und Safari. So funktioniert es in IE $("T", node).find("TX"). Irgendwelche Erklärungen warum $("T TX", node) funktioniert nicht in IE?

+2

Antwort von John Resig auf der JQuery-Dev-Liste, die besagt, dass Sie ein Ticket dafür machen. Also http://dev.jquery.com/ticket/4748 – morgancodes

+0

habe ich alles bestätigt was du gesagt hast und es auch mit IE7 versucht. Kein Glück ... seltsam. Es ist definitiv, dass der Kontext ignoriert wird. Ich habe Variationen mit dem gleichen Ergebnis .eq (0) oder mit dem Element für den Kontext versucht. Nada. –

+0

@morgancodes Interessanter Bugfind. – artlung

Antwort

3

Meine Vermutung ist ein Fehler im JQuery-Code für: Erstens. Ich erinnere mich, dass ich vor einiger Zeit gesehen habe, wie man IE dazu bringen kann, der CSS-Pseudoklasse des ersten Kindes zu erlauben, dass man einen DOCTYPE braucht. Kein Doctype auf dem XML ... also vielleicht ist es das.

Ich würde nur von $ ("CI: zuerst") zu $ ​​("CI") wechseln. Eq (0). $ ("CI") gibt ein Array aller CI-Elemente und eq (0) gibt Ihnen das erste Element.

+0

$ ("CI: first") funktioniert eigentlich richtig. Es ist bei $ ("T TX", Knoten), wo es fehlschlägt. – morgancodes

Verwandte Themen