2010-03-30 48 views
5

Tôi đang thực hiện một loạt các thao tác DOM đầy đủ, trong đó một vài phần tử (các phần tử biểu mẫu cụ thể) có một số sự kiện.Phát sinh một đối tượng HTMLElement từ đối tượng jQuery

Tôi đang tạo động (thực sự nhân bản từ một phần tử nguồn) một số hộp <select> và gán sự kiện thay đổi() cho họ.

Sự kiện thay đổi thực thi và trong ngữ cảnh của sự kiện, "this" là đối tượng phần tử HTML.

Tuy nhiên, những gì tôi cần làm vào thời điểm này là xác định bối cảnh cho đối tượng yếu tố HTML này. Tôi có các đối tượng được lưu trữ đã như những thực thể jQuery trong các loại mảng, nhưng rõ ràng

[HTMLElement Object] != [Object Object]

Và các trick là tôi không thể cast $ (this) và làm một so sánh hiệu lực kể từ đó sẽ tạo ra một đối tượng mới và con trỏ sẽ khác.

Vì vậy ... Tôi đã đập đầu của tôi chống lại điều này trong một thời gian. Trong quá khứ tôi đã có thể phá vỡ vấn đề này bằng cách so sánh innerHTML, nhưng trong trường hợp này các đối tượng tôi so sánh giống hệt 100%, chỉ có rất nhiều. Vì vậy tôi cần một so sánh vững chắc.

Điều này sẽ dễ dàng nếu tôi bằng cách nào đó có thể lấy được đối tượng HTMLElement từ đối tượng jQuery ban đầu của tôi.

Suy nghĩ, ý tưởng khác? Cứu giúp. :(

Trả lời

4

Có thể bạn không chỉ cần sử dụng $(this).data("something") để giữ cho dữ liệu trên các yếu tố của bạn và sau đó kiểm tra các giá trị sau? (Đó là giả sử bạn có thể không chỉ cung cấp cho những điều ol đồng bằng' 'id' giá trị.)

Oh cũng jQuery chính nó có một yếu tố "type" mà bạn có thể sử dụng (hãy cẩn thận!)

$(myNewObject).data("identity", $.quid++); 
+0

Brilliant. Tôi không biết rằng tồn tại ... đâu là giá trị được lưu trữ thực sự? Thỏa thuận với ID là họ đã có ID trong giai đoạn phát triển này mà tôi chưa sẵn sàng xóa do một số vấn đề tương thích ngược. –

+0

Chấp nhận điều này bây giờ nhưng tôi luôn mở ra nhiều ý tưởng hơn. Nhưng dữ liệu() dường như làm các trick. –

+0

Ồ, nếu các đối tượng có giá trị "id", tại sao không chỉ sử dụng các giá trị đó?Lưu ý rằng bạn cần phải đảm bảo rằng tất cả các giá trị "id" là duy nhất, hoặc những thứ lạ và bí ẩn (thường là xấu) sẽ bắt đầu xảy ra. – Pointy

4

Đây sẽ là dễ dàng nếu tôi bằng cách nào đó có thể lấy được các đối tượng phần tử html từ có nguồn gốc đối tượng jQuery tôi

bạn không chỉ có nghĩa là $("#object")[0] hoặc $("#object").get(0) với 'derive' phải không?

+0

Không. Chọn bằng ID cũng không phải là một tùy chọn. –

+1

Ông có nghĩa là với đối tượng jQuery của bạn đã được nạp với một bộ chọn, rằng $() [0] sẽ cung cấp cho bạn (các) thành phần được tìm thấy bằng cách sử dụng bộ chọn đã cho. Ví dụ: $ (this) [0] == điều này trả về true, trong khi $ (this) == điều này trả về false. – Bob

+2

thực sự, $ ("# đối tượng") [0] trả về phần tử HTML HTML gốc. – jAndy

0

Nếu bạn duy trì một đối tượng jQuery có chứa các yếu tố bạn đã tạo/nhân bản (chúng ta hãy gọi nó là "jqClonedElements"), bạn có thể giảm mà thiết lập để các yếu tố duy nhất phù hợp với "này" với $().filter(element):

var jqThis = jqClonedElements.filter(this); 

Sau đó, bạn có thể muốn xác nhận rằng yếu tố của bạn đã được tìm thấy, như sau:

var elementWasFound = (jqThis.length > 0); 

đó nên là tất cả để có nó!

-Matt

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