Я получаю противоречивые результаты в разных браузерах с помощью следующего теста:
============ 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>
Что должно произойти, это:
- Загрузка xml через ajax call
- выберите узел XML:
$("CI:first", data);
- выберите узел в этом узле:
$("T TX", node)
- второй выбор должен содержать только один тег "TX"
Однако в IE6 и IE8 (еще не пробовал IE7) второй вариант, кажется, игнорирует контекст «узла» и выполняет поиск во всем XML-документе. Тест выполняется, как и ожидалось, в FireFox и Safari. Делать это таким образом работает в IE $("T", node).find("TX")
. Любые объяснения, почему $("T TX", node)
не работает в IE?