2009-12-09 29 views
15

Sử dụng JQuery:

Đôi khi, tôi có thể làm variable.val() và hoạt động. Đôi khi, tôi bắt buộc phải sử dụng $(variable).val().

Tôi muốn có thể đưa ra lựa chọn mà không cần dùng thử và lỗi.

Có ai biết khi nào để quấn một đối tượng với $() trong khi sử dụng JQuery không?

Trả lời

13

Gói một đối tượng DOM với $() sẽ chuyển đổi nó thành một phần tử jQuery Wrapped Set. Bằng cách này bạn sẽ có thể gọi các phương thức jQuery với nó (val(), attr(), show(), hide(), serialize()).

Nếu bạn cần nhận hoặc đặt thuộc tính javascript thuần túy, thì bạn không nên bọc nó.

+2

... trừ khi biến đã là đối tượng JQuery là kết quả của bộ chọn jquery :) Có thể đây là trường hợp khi gọi val() trực tiếp hoạt động. – Slavo

4

Có ai biết khi nào để quấn một đối tượng với $() trong khi sử dụng JQuery không?

Đến thời điểm: khi obj instanceof jQuery trả về giá trị sai. Đây thường là trường hợp với this và các đối số phương thức (trừ khi phương thức được ghi lại để đối số PHẢI là một đối tượng jQuery).

Vì vậy, nếu bạn có this và bạn muốn có các hàm jQuery, thì bạn cần phải bọc nó. Ví dụ.

function() { 
    $this = $(this); 
    $this.val(); 
} 

Ngoài ra nếu bạn có chức năng mà đối số không nhất thiết phải là phần tử jQuery và bạn muốn đảm bảo chúng, thì bạn cần phải bọc nó trước. Ví dụ.

function(e) { 
    e = $(e); 
    e.val(); 
} 

Không có hại khi bọc lại phần tử jQuery.

0

Khi bắt đầu học jQuery, thường là thử và lỗi để tìm ra khi nào một biến đã được bao bọc hay chưa. Ví dụ, trong các hàm sự kiện, biến này không phải là một đối tượng jQuery. Ngoài ra, tôi tin rằng nó không phải là nguy hiểm ở tất cả để bọc lại một đối tượng jQuery.

Tôi không nghĩ rằng đó là điều bạn cần phải lo lắng, bởi vì bạn sẽ tìm ra đủ sớm khi để bọc và khi không, khi bạn viết thêm jQuery-code trong tương lai.

0

Nếu bạn có trình xử lý sự kiện thì hãy lấy val() bạn cần bọc nó, vì elem bên dưới không được bao bọc, nhưng bạn chỉ có thể làm elem.value trong ví dụ dưới đây.

$('#someid').bind('click', function(e) { 
    var elem = e.currentTarget; 
} 

Nếu bạn không nhận được phần tử sử dụng bộ chọn, có thể bạn sẽ cần phải bọc nó.

Bạn chỉ có thể có chức năng tiện ích sẽ trả lại phần tử được bao bọc, nếu bạn thực sự muốn, vì vậy nó luôn được bao bọc.

Chỉ cần chuyển bất kỳ phần tử nào vào phần tử đó và sau đó có thể kiểm tra xem đó có phải là đối tượng jquery và nếu không quấn nó, nhưng nó sẽ luôn trả về phiên bản được gói.

0

Không có hại trong luôn sử dụng $(something)(nếu bạn có kế hoạch sử dụng phương pháp jQuery trên something)

6

một cách đơn giản $(variable) mất một phần tử DOM và tạo ra một đối tượng jQuery. Bạn cần phải sử dụng nó bất cứ lúc nào bạn kết thúc với một đối tượng DOM hơn là một đối tượng jQuery.

Những lý do rất có thể bạn sẽ nhận được một đối tượng DOM sẽ là:

  1. Sự kiện - Trong mọi trường hợp bạn ràng buộc (như nhấp chuột) trong jQuery, các this biến và tất cả các đối số sự kiện sẽ tham khảo các đối tượng DOM (không phải đối tượng jQuery).
  2. JavaScript không phải jQuery - Nếu bạn có các phần mã của mình vẫn sử dụng document.getElementById (Giống như bạn có một số javascript cũ hoặc đang tham chiếu thư viện của bên thứ ba không phải là plugin jQuery vì lý do nào đó) thì đây sẽ là đối tượng DOM và cần phải được bọc.

Có tuy nhiên không có hại trong việc kêu gọi $(variable) nếu variable đã là một đối tượng jQuery, ngoài obfuscation cho những người có thể đoán đó là một đối tượng DOM bằng cách bạn sử dụng nó, và bạn luôn có thể lấy lại cho các đối tượng DOM bằng cách gọi số $(variable)[0].

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