jQuery nhận html của container bao gồm cả chính container


156

Làm cách nào để tôi nhận được html trên '#container' bao gồm cả '#container' và không chỉ những gì bên trong nó.

<div id="container">
 <div id="one">test 1 </div>
 <div id="two">test 2 </div>
 <div id="three">test 3 </div>
 <div id="four">test 4 </div>
</div>

Tôi có cái này lấy html bên trong #container. nó không bao gồm chính phần tử #container. Đó là những gì tôi đang muốn làm

var x = $('#container').html();
$('#save').val(x);

Kiểm tra http://jsfiddle.net/rzfPP/58/


bạn có thể đặt container bên trong một container khác và lấy container đó html ... nhưng điều đó có vẻ hơi khó hiểu. có lẽ nếu chúng ta biết thêm một chút về vấn đề, chúng ta có thể đưa ra một giải pháp khả thi? Bạn đang làm gì với một vùng văn bản đầy html?
Patricia

Câu trả lời:


160

Nếu bạn bọc container trong Pthẻ giả, bạn cũng sẽ nhận được HTML container.

Tất cả bạn cần làm là

var x = $('#container').wrap('<p/>').parent().html();

Kiểm tra ví dụ làm việc tại http://jsfiddle.net/rzfPP/68/

Để unwrap()các <p>thẻ khi thực hiện xong, bạn có thể thêm

$('#container').unwrap();

19
@ mc10 chúng ta chỉ cần sử dụng clone () và bạn sẽ không phải lo lắng về các yếu tố bổ sung được tạo. var x = $('#container').clone().wrap('<p/>').parent().html();. Ý tưởng của bọc là tuyệt vời và phân bổ ít phức tạp hơn hầu hết các giải pháp được cung cấp.
Pinkie

Vấn đề của Firefox đã lỗi thời vì vậy tôi khuyên bạn nên bỏ phiếu trả lời @MikeM vì đây là bản JS thuần túy.
Cướp

6
Tại sao một <p>thẻ? Sẽ không <div>có ý nghĩa hơn?
Martin Burch

6
Điều này có một giải pháp đơn giản hơn nhiều. Xem câu trả lời của tôi.
1,44mb

132
var x = $('#container').get(0).outerHTML;

CẬP NHẬT : Điều này hiện được Firefox hỗ trợ kể từ FireFox 11 (tháng 3 năm 2012)

Như những người khác đã chỉ ra, điều này sẽ không hoạt động trong FireFox. Nếu bạn cần nó để hoạt động trong FireFox, thì bạn có thể muốn xem câu trả lời cho câu hỏi này: Trong jQuery, có bất kỳ hàm nào tương tự như html () hoặc text () nhưng trả về toàn bộ nội dung của thành phần khớp không?


6
Điều này hoạt động trong Firefox và hiện tại nó tốt hơn giải pháp được chấp nhận.
luqita

Đây là một cách thanh lịch để làm điều đó, tốt hơn là câu trả lời được chấp nhận chỉ là một bản hack bẩn
minhajul

Đây là hoàn hảo.
Gaurav Aggarwal

Đây là câu trả lời hoàn hảo bởi vì gói thẻ cha bằng div hoặc p là ý tưởng tồi. có thể là css của bạn sẽ phá vỡ. đặc biệt khi bạn đang sử dụng bootstrap (ví dụ: hàng mẫu). do đó câu trả lời này là khá tốt.
Sudhir K Gupta

73

Tôi thích sử dụng cái này;

$('#container').prop('outerHTML');

7
Đây có vẻ như là giải pháp tốt nhất đối với tôi, không yêu cầu thao tác dom, hoặc thao tác dom giả (phương pháp bọc). Và đối tượng jquery đã có tài sản.
Nieminen

1
thích giải pháp này
Sameera Kumarasingha

69
var x = $('#container')[0].outerHTML;

1
Vấn đề Firefox đã lỗi thời vì vậy tôi đề nghị bỏ phiếu cho câu trả lời này.
Cướp

1
Sử dụng .clone () hoạt động, nhưng điều này sạch hơn nhiều, imo. Câu trả lời được chấp nhận tạo ra các yếu tố mới trong DOM = bad.
pete

13
$('#container').clone().wrapAll("<div/>").parent().html();

Cập nhật: outsHTML hoạt động trên firefox ngay bây giờ, vì vậy hãy sử dụng câu trả lời khác trừ khi bạn cần hỗ trợ các phiên bản firefox rất cũ


Thuộc tính bên ngoài không hoạt động trên Firefox, do đó bạn cần phải làm điều đó với bản sao
Robert Noack

2

Cũ nhưng dùng vẫn tốt...

Vì người dùng đang yêu cầu jQuery, tôi sẽ làm cho nó đơn giản:

var html = $('#container').clone();
console.log(html);

Fiddle ở đây.


2
Điều này không giúp lấy ra html của chính container. Nó thậm chí không trả về mã html. Tôi có thể thấy rằng có thể thực tế khi truy cập nút mục tiêu thông qua bản sao để tránh sửa đổi dom, nhưng sau đó sẽ tốt hơn khi đề cập đến lý do tại sao bạn sử dụng phương pháp này.
AeonOfTime


0

Firefox không hỗ trợ bên ngoàiHTML , vì vậy bạn cần xác định một chức năng để hỗ trợ nó:

function outerHTML(node) {
    return node.outerHTML || (
        function(n) {
            var div = document.createElement('div');
            div.appendChild( n.cloneNode(true) );
            var h = div.innerHTML;
            div = null;
            return h;
        }
    )(node);
}

Sau đó, bạn có thể sử dụng bên ngoàiHTML:

var x = outerHTML($('#container').get(0));
$('#save').val(x);

0
var x = $($('div').html($('#container').clone())).html();

6
Bạn đang tạo 3 đối tượng jquery trong một câu lệnh. Mặc dù nó hoạt động, đó là một quá mức cần thiết.
Pinkie

-2

Giải pháp đơn giản với một ví dụ:

<div id="id_div">
  <p>content<p>
</div>

Di chuyển DIV này sang DIV khác với id = "other_div_id"

$('#other_div_id').prepend( $('#id_div') );

Hoàn thành


OP đang yêu cầu HTML thô được đại diện bởi một đối tượng jQuery, trong đó phương thức này di chuyển một đối tượng jQuery từ nơi này sang nơi khác.
Simon Robb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.