jQuery konteyner kendisi de dahil olmak üzere konteyner html olsun


156

'#Container' da dahil olmak üzere '#container' üzerindeki html'yi nasıl edinebilirim?

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

#Container içinde html alır bu var. #container öğesinin kendisini içermez. Yapmak istediğim şey bu

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

Http://jsfiddle.net/rzfPP/58/ adresini kontrol edin


başka bir kabın içine kap koyabilir ve o kapları html alabilirsiniz ... ama bu biraz acayip görünüyor. belki sorun hakkında biraz daha fazla bilgi sahibi olsaydık, uygulanabilir bir çözüm bulabilirdik? html ile dolu bir metin alanıyla ne yapıyorsun?
Patricia

Yanıtlar:


160

Kapsayıcı bir sahte Petikete sarılırsa , kapsayıcı HTML'sini de alırsınız.

Tek yapman gereken

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

Http://jsfiddle.net/rzfPP/68/ adresinde çalışan örneği kontrol edin

To etiketi yapılır, ekleyebilirsinizunwrap()<p>

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

19
@ mc10 sadece clone () kullanabiliriz ve oluşturulan ekstra öğeler için endişelenmenize gerek kalmaz. var x = $('#container').clone().wrap('<p/>').parent().html();. Sarma fikri harika ve sağlanan çözümlerin çoğundan daha az karmaşık.
Pinkie

Firefox sorunu güncel değil, bu yüzden saf JS'de @MikeM yanıtını oylamanızı öneririm.
Rob

6
Neden bir <p>etiket? Bir olmaz mıydı <div>yapmak daha mantıklı?
Martin Burch

6
Bunun çok daha basit bir çözümü var. Cevabımı gör.
1.44mb

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

GÜNCELLEME : Bu, FireFox 11 (Mart 2012) itibariyle Firefox tarafından desteklenmektedir

Diğerlerinin de belirttiği gibi, bu FireFox'ta çalışmaz. FireFox'ta çalışması gerekiyorsa, bu sorunun cevabına bir göz atmak isteyebilirsiniz: jQuery'de, html () veya text () işlevine benzeyen ancak eşleşen bileşenin tüm içeriğini döndüren herhangi bir işlev var mı?


6
Bu Firefox'ta çalışıyor ve şu an için kabul edilen çözümden daha iyi.
luqita

Bu, bunu yapmak için zarif bir yol, o zaman sadece kirli bir hack kabul edilen cevap daha iyi
minhajul

Bu harika.
Gaurav Aggarwal

bu mükemmel yanıttır çünkü üst etiketi div veya p ile sarmak kötü bir fikirdir. belki senin css kırılacak. özellikle bootstrap kullanırken (örn. form satırı). dolayısıyla bu cevap oldukça iyi.
Sudhir K Gupta

73

Bunu kullanmayı seviyorum;

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

7
Bu benim için en iyi çözüm gibi görünüyor, dom manipülasyonu veya sahte dom manipülasyonu (sarma yöntemleri) gerektirmiyor. Ve jquery nesnesi zaten özelliğe sahiptir.
Nieminen

1
Bu çözümü seviyorum
Sameera Kumarasingha

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

1
Firefox sorunu güncel değil, bu yüzden bu yanıtı oylamanızı öneririm.
Rob

1
.Clone () kullanmak işe yarar, ama bu çok daha temiz, imo. Kabul edilen cevap, DOM = bad içinde yeni öğeler oluşturur.
pete

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

Güncelleme: outerHTML artık firefox'ta çalışıyor, bu nedenle firefox'un çok eski sürümlerini desteklemeniz gerekmedikçe diğer yanıtı kullanın


outerHTML özelliği Firefox'ta çalışmaz, bu nedenle klonla yapmanız gerekir
Robert Noack

2

Eski ama iyi...

Kullanıcı jQuery istediğinden, basit tutacağım:

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

Burada keman çal.


2
Bu, kabın kendisinin html'sinin alınmasında yardımcı olmaz. HTML kodu bile döndürmez. Domu değiştirmekten kaçınmak için hedef düğüme klon yoluyla erişmenin pratik olabileceğini görebilirim, ancak bu yöntemi neden kullandığınızı belirtmek iyi olur.
AeonOfTime


0

Firefox outerHTML desteklemediği Gerekirse bu nedenle, bir işlev tanımlamak yardım desteği kendisine:

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

Daha sonra outerHTML'yi kullanabilirsiniz:

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

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

6
Bir deyimde 3 jquery nesnesi oluşturuyorsunuz. Çalışmasına rağmen, aşırıya kaçma.
Pinkie

-2

Bir örnekle basit çözüm:

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

Bu DIV'yi id = "other_div_id" ile diğer DIV'ye taşıyın

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

Bitiş


OP, bu yöntemin bir jQuery nesnesini bir yerden başka bir yere taşıdığı bir jQuery nesnesi tarafından temsil edilen ham HTML'yi istiyor.
Simon Robb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.