tôi nhận được kết quả inconsistant trên các trình duyệt với các thử nghiệm sau đây:jquery selector kỳ lạ - đây có phải là một lỗi hoặc tôi làm sai?
============ 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>
gì nên xảy ra là thế này:
- tải xml qua ajax gọi
- chọn một nút xml:
$("CI:first", data);
- chọn một nút trong nút đó:
$("T TX", node)
- lựa chọn thứ hai nên chỉ đưa ra một thẻ "TX"
Tuy nhiên, trong IE6 và IE8 (thiên đường' t đã thử IE7), lựa chọn thứ hai dường như bỏ qua ngữ cảnh "nút" và tìm kiếm toàn bộ tài liệu xml. Thử nghiệm chạy như dự kiến trong FireFox và Safari. Làm theo cách này hoạt động trong IE $("T", node).find("TX")
. Bất kỳ giải thích nào về lý do tại sao $("T TX", node)
không hoạt động trong IE?
Có phản hồi từ John Resig trong danh sách nhà phát triển jquery nói rằng hãy tạo một vé cho việc này. Vì vậy, http://dev.jquery.com/ticket/4748 – morgancodes
Tôi đã xác nhận mọi thứ bạn đã nói và cũng đã thử với IE7. Không may mắn ... lạ. Đó chắc chắn là bối cảnh đang bị bỏ qua. Tôi đã thử các biến thể với cùng một kết quả .eq (0) hoặc sử dụng phần tử cho ngữ cảnh. Nada. –
@morgancodes Bugfind thú vị. – artlung