2009-06-11 11 views
6

Estoy consiguiendo resultados inconsistente en todos los navegadores con la siguiente prueba:jquery selector strangeness - ¿Es esto un error o lo estoy haciendo mal?

============ =========== 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> 

¿Qué debe suceder es lo siguiente:

  • de carga a través de xml llamada ajax
  • seleccione un nodo XML: $("CI:first", data);
  • seleccione un nodo dentro de ese nodo: $("T TX", node)
  • segunda selección debe sólo vienen con una etiqueta de "TX"

Sin embargo, en IE6 e IE8 (paraíso' t intentado IE7), la segunda selección parece ignorar el contexto de "nodo" y buscar todo el documento xml. La prueba se ejecuta como se esperaba en FireFox y Safari. Haciéndolo de esta manera funciona en IE $("T", node).find("TX"). ¿Alguna explicación de por qué $("T TX", node) no funciona en IE?

+2

Obtuve una respuesta de John Resig en la lista de desarrolladores de jquery diciendo que haga una entrada para esto. Así que http://dev.jquery.com/ticket/4748 – morgancodes

+0

Confirmé todo lo que dijo y también lo intenté con IE7. Sin suerte ... extraño. Definitivamente, se está ignorando el contexto. Probé variaciones con el mismo resultado .eq (0) o usando el elemento para contexto. Nada. –

+0

@morgancodes Interesante bugfind. – artlung

Respuesta

3

Supongo que hay un error en el código de JQuery para: primero. Recuerdo que hace un tiempo, cuando vi que IE permitía que funcionara la pseudoclase de CSS del primer hijo, necesitas un DOCTYPE. No doctype en el XML ... así que tal vez eso es todo.

Simplemente cambiaría de $ ("CI: first") a $ ("CI"). Eq (0). $ ("CI") dará una matriz de todos los elementos de CI, y eq (0) le dará el primer elemento.

+0

$ ("CI: primero") funciona correctamente, en realidad. Está en $ ("T TX", nodo) donde falla. – morgancodes

Cuestiones relacionadas