Tôi đang cố gắng hiểu cách jQuery tạo đối tượng trả về khi tìm kiếm các phần tử DOM. Tôi đã đi qua các nguồn, nhưng tôi không hoàn toàn chắc chắn tôi hiểu, và hy vọng ai đó ở đây có thể cho tôi một số cái nhìn sâu sắc. Từ những gì tôi có thể thu thập đọc nguồn, khi truy vấn jQuery DOM, jQuery tìm các phần tử DOM phù hợp, sau đó thêm phần tử DOM phù hợp làm đối tượng sử dụng chỉ mục của phần tử làm khóa cho đối tượng mới.Hiểu đối tượng trả về jQuery
if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {
for (match in context) {
// Properties of context are called as methods if possible
if (jQuery.isFunction(this[ match ])) {
this[ match ](context[ match ]);
// ...and otherwise set as attributes
} else {
this.attr(match, context[ match ]);
}
}
}
return this;
Trả lại this
, trả về toàn bộ đối tượng jQuery bao gồm tất cả các phương pháp. Tôi đã nhận nó đúng vào thời điểm này chưa?
Bây giờ, nó xuất hiện tất cả các chức năng như css, find, ajax, hide, v.v. nằm trong đối tượng jQuery.fn.
Bằng cách nào đó (và tôi nghĩ rằng đây là nơi mà tôi không nhìn thấy nó), các chức năng này được gọi là, không phải trên phần tử DOM chính nó, nhưng qua access.js https://github.com/jquery/jquery/blob/master/src/core/access.js
var access = jQuery.access = function(elems, fn, key, value, chainable, emptyGet, raw) {
sử dụng css như Ví dụ, chúng ta có
jQuery.extend({
css: function(elem, name, extra, styles) {...
jQuery.fn.extend({
css: function(name, value) {
return access(this, function(elem, name, value) {
var styles, len,
map = {},
i = 0;
if (jQuery.isArray(name)) {
styles = getStyles(elem);
len = name.length;
for (; i < len; i++) {
map[ name[ i ] ] = jQuery.css(elem, name[ i ], false, styles);
}
return map;
}
return value !== undefined ?
jQuery.style(elem, name, value) :
jQuery.css(elem, name);
}, name, value, arguments.length > 1);
những gì tôi nghĩ rằng tôi thiếu là làm thế nào chúng tôi nhận được từ gọi $('div').css(...)
đó gọi phương thức jQuery.fn.extend.css, và từ đó, các phương pháp truy cập được gọi với chữ ký khác với acc phương pháp ess được khởi tạo trong jQuery cốt lõi?
Ngoài ra, nếu chúng ta không ngừng thay thế jQuery[0],jQuery[1]
, thế nào là nó mà tôi có thể có:
var divs = $('div');
var spans = $('span');
Duy trì hai bộ khác nhau của thẻ tài liệu nếu họ đều trở về cùng một đối tượng jQuery? Tôi nghĩ rằng đối tượng sẽ được cập nhật.
Tôi có hoàn toàn hiểu nhầm cách thức này hoạt động không?
Cách tiếp cận "từng bước" với trình gỡ lỗi là gì?': /' – Stphane