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?
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
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. –
@morgancodes Interesante bugfind. – artlung