13

Khi bạn muốn để có được những HTML của toàn bộ một phần tử DOM (wrapper bao gồm), bạn có thể làm như sau (như đã giải thích here):

$('#myElementId')[0].outerHTML 

Nhưng những gì bạn không có thể làm là gọi outerHTML trên $(this) bên trong ví dụ một phạm vi bấm nghe hoặc công cụ chọn chức năng cơ thể:

$(this).outerHTML //Doesn't complete in IntelliSense, returns undefined in browser 

hoặc

$(this)[0].outerHTML //Correction, this DOES work, but it doesn't complete in IntelliSense 

vì IntelliSense sẽ không hiển thị innerHTML hoặc outerHTML trong những hoàn cảnh, mặc dù với vanilla JavaScript bạn có thể làm:

document.getElementById($(this).attr('id')).outerHTML 

Vì vậy, ... có chuyện gì với điều đó?

+5

Bạn có thực sự thử bản thân trình duyệt không? Tôi không đặc biệt nhìn thấy điểm của việc sử dụng 'outerHTML' theo cách đó nhưng điều đó sẽ hiệu quả. –

+3

Có thể Intellisense không thể xác định rằng '$ (this) [0]' là một phần tử DOM, vì vậy nó không đề xuất thành viên DOM. –

+0

Dựa vào giải thích của @ FrédéricHamidi. Bạn có nhận được bất kỳ intellisense trên '$ (this) .get (0) .outerHTML'? –

Trả lời

22

outerHTML là thuộc tính DOM; jQuery không trưng ra tất cả các thuộc tính DOM.

Nếu bạn có đối tượng jQuery, bạn chỉ có thể truy cập trực tiếp vào các thuộc tính và phương thức mà jQuery hiển thị và ngược lại đối với các đối tượng DOM.

Trong thuật ngữ hướng đối tượng, đối tượng jQuery không kế thừa từ đối tượng DOM, chúng chứa chúng.

Nói $x[0] đưa bạn đối tượng DOM cho phần tử đầu tiên được đại diện bởi một đối tượng jQuery.

+3

Người hỏi nói rằng Intellisense không hoàn thành '$ (this) [0] .outerHTML', do đó, nó không chỉ là một vấn đề đối tượng jQuery/yếu tố DOM. –

+5

@ FrédéricHamidi: Tôi đoán Intellisense không đủ thông minh để xác định rằng một bộ truy cập mảng của đối tượng jQuery '[]' trả về một phần tử DOM. – RichieHindle

+0

@ FrédéricHamidi nó thực sự * không * hoàn thành '$ (this) [0] .outerHTML' mặc dù nó hoạt động trong trình duyệt. –

19

Bạn có thể sử dụng trực tiếp this để truy cập outerHTML của đối tượng hiện tại thay vì gián tiếp trải qua $(this) như thế này đại diện cho đối tượng DOM (trong đó có outerHTML tài sản) trong khi $(this) đại diện cho đối tượng jQuery.

this.outerHTML 
4

Bộ chọn jQuery trả về đối tượng jQuery giống như mảng không có thuộc tínhHTML bên ngoài.

Tuy nhiên, mảng kết quả jQuery chứa các phần tử DOM.
Điều đó có nghĩa là bạn thực sự có thể truy cập theo cách này.

$(".someClass")[0].outerHTML // it works for me 

Cập nhật: Nó làm việc cho tôi ở mọi trình duyệt.
Tôi cũng có thể truy cập đối tượng jQuery giống như mảng trong trình xử lý sự kiện nhấp chuột.

$(".someClass").click(function() 
{ 
    alert($(this)[0].outerHTML); // it works me too 
}); 

Đây là JSFiddle tôi: http://jsfiddle.net/13btf60p/

Cập nhật 2:

OK, bây giờ tôi nhận được câu hỏi của bạn. Nó phải có tác dụng. Bạn có thực sự cần một IntelliSense để hoàn thành việc xây dựng đơn giản và đơn giản như vậy không?

+5

OP tuyên bố rằng '$ (this) [0] .outerHTML' không hoạt động đúng. Thực tế là jQuery trả về một đối tượng giống như mảng không liên quan. –

+0

@ Qantas94Heavy Nó hoạt động đúng với tôi trong các trình duyệt khác nhau. Tôi có thể truy cập '$ (this) [0] .outerHTML' trên sự kiện nhấp chuột. –

+2

@YeldarKurmangaliyev nhưng câu hỏi khác. – Jai

1

Tôi sẽ thêm những gì tôi tìm thấy là giải pháp đúng cho những gì kết thúc là một lỗ hổng đơn giản trong cài đặt Visual Studio mặc định để tham khảo trong tương lai.

Vì tôi không muốn để điều này đi, tôi đã tìm kiếm thêm và phát hiện ra rằng, theo mặc định, jQuery IntelliSense có phần tồi tệ ra khỏi hộp trong Visual Studio 2013.

Dưới

Tools> Options> Text Editor> javascript> IntelliSense> Tài liệu tham khảo

tôi đặt

Nhóm tham chiếu: "Implicit (Web)"

và thêm tệp jQuery hiện có. Điều này giải quyết tất cả các vấn đề của câu hỏi của tôi và IntelliSense bây giờ cho thấy tất cả các thành viên và phương pháp một cách chính xác, mặc dù điều này nên chỉ đơn giản là làm việc ra khỏi hộp thay vì chi phí tất cả mọi người một bó của thời gian.

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