jQuery отримати html контейнера, включаючи сам контейнер


156

Як я можу отримати HTML на "#container", включаючи "#container", а не тільки те, що знаходиться всередині нього.

<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>

У мене є це, яке отримує html всередині #container. він не включає сам елемент #container. Це те, що я хочу зробити

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

Перевірте http://jsfiddle.net/rzfPP/58/


Ви можете помістити контейнер всередину іншого контейнера і отримати HTML-контейнери ... але це здається трохи хитким. можливо, якби ми знали трохи більше про проблему, ми могли б придумати ефективне рішення? що ти робиш із текстовою областю, повною html?
— Патрісія

Відповіді:


160

Якщо ви загорнуте контейнер у фіктивний Pтег, ви також отримаєте HTML контейнера.

Все, що вам потрібно зробити - це

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

Перевірте приклад роботи на веб-сайті http://jsfiddle.net/rzfPP/68/

Щоб unwrap()в <p>тезі , коли зроблено, ви можете додати

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

19
@ mc10 ми можемо просто використовувати clone (), і вам не доведеться турбуватися про зайві елементи, створені. var x = $('#container').clone().wrap('<p/>').parent().html();. Ідея обгортання є чудовою та виділяє менше складність, ніж більшість запропонованих рішень.
— Пінкі

Проблема Firefox застаріла, тому я пропоную проголосувати за відповідь @MikeM, оскільки вона є чистою JS.
— Роб

6
Чому <p>тег? Не було <div>б більше сенсу?
— Мартін Берч

6
Це має набагато простіше рішення. Дивіться мою відповідь.
— 1.44mb

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

ОНОВЛЕННЯ : Зараз це підтримується Firefox станом на FireFox 11 (березень 2012 р.)

Як зазначали інші, це не спрацює у FireFox. Якщо вам потрібно, щоб він працював у FireFox, ви, можливо, захочете поглянути на відповідь на це запитання: Чи є у jQuery функція, схожа на html () або text (), але повертає весь вміст відповідного компонента?


6
Це працює в Firefox, і це краще, ніж прийняте рішення на даний момент.
— luqita

це елегантний спосіб зробити це, краще, ніж прийнята відповідь, яка була просто брудним злом
— minhajul

Це прекрасно.
— Gaurav Aggarwal

це ідеальна відповідь, оскільки обгортання батьківського тегу ділом або р - це погана ідея. може ваш css зламається особливо, коли ви використовуєте завантажувальний засіб (наприклад, рядок форми). отже, ця відповідь є досить хорошою.
— Sudhir K Gupta

73

Я люблю це використовувати;

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

7
Це здається найкращим рішенням для мене, не вимагає ні маніпуляції з домом, ні маніпуляції з псевдо-домом (методи обгортання). А об’єкт jquery вже має властивість.
— Nieminen

1
люблю це рішення
— Самєра Кумарасінгха

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

1
Проблема Firefox застаріла, тому я пропоную проголосувати цю відповідь.
— Роб

1
Використання .clone () працює, але це набагато чистіше, imo. Прийнята відповідь створює нові елементи в DOM = погано.
— піт

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

Оновлення: externalHTML зараз працює на firefox, тому використовуйте іншу відповідь, якщо вам не потрібно підтримувати дуже старі версії firefox


Властивість externalHTML не працює на Firefox, тому вам потрібно це зробити з клоном
— Роберт Ноак

2

Олді, але золото ...

Оскільки користувач просить jQuery, я збираюся простіше:

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

Скрипаль тут.


2
Це не допомагає отримати html самого контейнера. Він навіть не повертає html-код. Я можу бачити, що може бути практичним доступ до цільового вузла через клон, щоб уникнути зміни дому, але тоді було б добре зазначити, чому ви використовуєте цей метод.
— AeonOfTime


0

Firefox не підтримує зовнішнійHTML , тому вам потрібно визначити функцію, яка допоможе його підтримати:

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);
}

Потім ви можете використовувати externalHTML:

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

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

6
Ви створюєте 3 об’єкти jquery в одному операторі. Хоча це працює, це надмірність.
— Пінкі

-2

Просте рішення з прикладом:

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

Перемістити цей DIV до іншого DIV за допомогою id = "other_div_id"

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

Закінчити


ОП запитує необроблений HTML, представлений об'єктом jQuery, де цей метод переміщує об’єкт jQuery з одного місця на інше.
— Саймон Робб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.