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.