jQuery pobiera html kontenera, w tym sam kontener


156

Jak uzyskać kod HTML na „#container”, w tym „#container”, a nie tylko to, co jest w środku.

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

Mam to, które pobiera kod HTML wewnątrz #container. nie zawiera samego elementu #container. To jest to, czego szukam

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

Sprawdź http://jsfiddle.net/rzfPP/58/


można umieścić kontener w innym kontenerze i pobrać ten kontener w formacie html ... ale to wydaje się trochę hakerskie. może gdybyśmy wiedzieli trochę więcej o problemie, moglibyśmy znaleźć praktyczne rozwiązanie? co robisz z obszarem tekstowym pełnym html?
Patricia

Odpowiedzi:


160

Jeśli opakujesz kontener w fikcyjny Ptag, otrzymasz również kod HTML kontenera.

Wszystko, co musisz zrobić, to

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

Sprawdź działający przykład pod adresem http://jsfiddle.net/rzfPP/68/

Po unwrap()zakończeniu do <p>tagu możesz dodać

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

19
@ mc10 możemy po prostu użyć clone () i nie będziesz musiał martwić się o dodatkowe utworzone elementy. var x = $('#container').clone().wrap('<p/>').parent().html();. Pomysł na wrap jest świetny i mniej skomplikowany niż większość proponowanych rozwiązań.
Pinkie,

Problem z Firefoksem jest nieaktualny, więc sugeruję zagłosowanie na odpowiedź @MikeM, ponieważ jest w czystym JS.
Rob

6
Dlaczego <p>tag? Czy nie miałoby to <div>większego sensu?
Martin Burch,

6
Ma to znacznie prostsze rozwiązanie. Zobacz moją odpowiedź.
1,44 MB

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

AKTUALIZACJA : to jest teraz obsługiwane przez Firefoksa od wersji FireFox 11 (marzec 2012)

Jak zauważyli inni, to nie zadziała w FireFox. Jeśli potrzebujesz go do działania w FireFox, możesz rzucić okiem na odpowiedź na to pytanie: Czy w jQuery jest jakaś funkcja podobna do html () lub text (), ale zwraca całą zawartość dopasowanego komponentu?


6
Działa to w przeglądarce Firefox i jest lepsze niż obecnie akceptowane rozwiązanie.
luqita,

to elegancki sposób na zrobienie tego, lepszy niż zaakceptowana odpowiedź, która była po prostu brudnym
hackiem

To jest doskonałe.
Gaurav Aggarwal

to doskonała odpowiedź, ponieważ umieszczenie w tagu nadrzędnym elementu div lub p jest złym pomysłem. może twój css się zepsuje. szczególnie gdy używasz bootstrap (np. form-row). stąd ta odpowiedź jest całkiem dobra.
Sudhir K Gupta

73

Lubię tego używać;

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

7
Wydaje mi się, że jest to najlepsze rozwiązanie, nie wymaga manipulacji domem lub pseudo domem (metody zawijania). Obiekt jquery ma już tę właściwość.
Nieminen

1
uwielbiam to rozwiązanie
Sameera Kumarasingha,

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

1
Problem z Firefoksem jest nieaktualny, więc proponuję zagłosować pod tą odpowiedzią.
Rob

1
Używanie .clone () działa, ale jest to znacznie czystsze, imo. Zaakceptowana odpowiedź tworzy nowe elementy w DOM = zły.
pete

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

Aktualizacja: externalHTML działa teraz w przeglądarce Firefox, więc użyj innej odpowiedzi, chyba że potrzebujesz obsługi bardzo starych wersji Firefoksa


Zewnętrzna właściwośćHTML nie działa w Firefoksie, więc musisz to zrobić z klonem
Robert Noack

2

Oldie but goldie ...

Ponieważ użytkownik pyta o jQuery, zamierzam to uprościć:

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

Tutaj skrzypce.


2
Nie pomaga to w pobieraniu kodu HTML samego kontenera. Nie zwraca nawet kodu html. Widzę, że dostęp do węzła docelowego przez klon może być praktyczny, aby uniknąć modyfikowania domeny, ale wtedy dobrze byłoby wspomnieć, dlaczego używasz tej metody.
AeonOfTime,


0

Firefox nie obsługuje zewnętrznego HTML , więc musisz zdefiniować funkcję, aby ją obsługiwać:

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

Następnie możesz użyć externalHTML:

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

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

6
Tworzysz 3 obiekty jquery w jednej instrukcji. Chociaż to działa, to przesada.
Pinkie

-2

Proste rozwiązanie z przykładem:

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

Przenieś ten DIV do innego DIV z id = "other_div_id"

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

koniec


OP żąda surowego kodu HTML reprezentowanego przez obiekt jQuery, gdzie ta metoda przenosi obiekt jQuery z jednego miejsca do drugiego.
Simon Robb
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.