2009-06-11 27 views
6

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?

+2

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

+0

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. –

+0

@morgancodes Bugfind thú vị. – artlung

Trả lời

3

Đoán của tôi là lỗi trong mã JQuery cho: trước tiên. Tôi nhớ một thời gian trước đây nhìn thấy một điều về nhận được IE để cho phép lớp CSS giả đầu tiên để làm việc bạn cần phải có một DOCTYPE. Không có doctype trên XML ... vì vậy có lẽ đó là nó.

Tôi chỉ chuyển từ $ ("CI: first") thành $ ("CI") .qq (0). $ ("CI") sẽ cung cấp cho một mảng của tất cả các phần tử CI, và eq (0) sẽ cho bạn phần tử đầu tiên.

+0

$ ("CI: first") đang hoạt động chính xác, thực sự. Nó ở $ ("T TX", nút) ở nơi nó không thành công. – morgancodes

Các vấn đề liên quan