Do theo gương HTML ...jQuery thêm() chức năng và bối cảnh của jQuery đối tượng
<div id='div1'>div one</div>
<div id='div2'>div two</div>
... Tôi thấy rằng mã jQuery sau ...
$('#div1').click(function() {
var $d = $(this); // Using 'this' instead of '#div1'
$d.add('#div2').remove();
});
. ..would không thêm #div2
vào tập tham chiếu bởi $d
, nhưng mã này ...
$('#div1').click(function() {
var $d = $('#div1'); // Using '#div1' instead of 'this'
$d.add('#div2').remove();
});
.. .successfully đã thêm #div2
.
Khi tư vấn firebug, tôi thấy rằng việc sử dụng $(this)
đã cho đối tượng jQuery ngữ cảnh #div1
, nhưng làm $('#div1')
cho đối tượng ngữ cảnh document
.
Với thông tin này tôi đã cố gắng ...
var $d = $(this, document);
... và add()
chức năng làm việc như mong đợi.
Vì vậy, đây là câu hỏi. Ai đó có thể giải thích cho tôi lý do tại sao một ngữ cảnh khác được chỉ định khi sử dụng $(this)
và $('#div1')
?
Cảm ơn câu trả lời. Tôi nghĩ có lẽ tôi không hiểu mục đích/sử dụng ngữ cảnh của một đối tượng jQuery. Tại sao '$ d' có ngữ cảnh' # div1' ở vị trí đầu tiên thay vì 'document'? – user113716
@patrick - Bạn có thể thấy cách '$ (this) 'được xử lý ở đây: http://github.com/jquery/jquery/blob/master/src/core.js#L59 Khi bạn thực hiện' $ (DOMElement) ' ngữ cảnh là phần tử DOM, nó hoạt động như thế nào. Ví dụ, bạn có thể xử lý một phần tử không có trong DOM, ví dụ như trong một đoạn tài liệu, do đó, 'tài liệu' không phải lúc nào cũng hoạt động. –
@patrick - Tôi đã đọc lại bài đăng của bạn và viết lại phần lớn câu trả lời để giải quyết tốt hơn câu hỏi chính của bạn, hy vọng làm rõ thêm một chút nữa, hãy cho tôi biết nếu nó vẫn để lại câu hỏi. –