Bir jQuery nesnesini bir dizeye nasıl dönüştürürsünüz?


Yanıtlar:


602

Tam HTML dizesini istediğinizi varsayalım. Eğer durum buysa, böyle bir şey işinizi görecektir:

$('<div>').append($('#item-of-interest').clone()).html(); 

Bu, burada daha derinlemesine açıklanmaktadır , ancak temel olarak, ilgilenilen öğeyi sarmak, manipülasyonlar yapmak, kaldırmak ve HTML'yi almak için yeni bir düğüm yaparsınız.

Bir dize gösteriminden hemen sonraysanız, ile devam edin new String(obj).

Güncelleme

Orijinal cevabı 2009'da yazdım. 2014'ten itibaren, çoğu büyük tarayıcı artık outerHTMLyerel bir özellik olarak destekleniyor (örneğin, Firefox ve Internet Explorer'a bakın ), böylece şunları yapabilirsiniz:

$('#item-of-interest').prop('outerHTML');

25
Sadece bunu yapmak için bir yöntem olmadığı berbat, ama bu ne olursa olsun harika bir çözüm.
Steve

2
Bu baş ve gövde etiketlerini kaldırır
ılǝ

1
@ user85461 Bu geçerli bir DOM düğümü değil, bu nedenle başlamak için bunun üzerinde outerHTML'yi çağırmak yanlış olur. (Nelerin girebileceğinin yalnızca küçük bir alt kümesi $(...)geçerli bir DOM düğümüdür.)
John Feminella

1
@Moss size iç html veya daha basit bir şekilde öğenin içinde ne olduğunu verirken, outerHtml size bir bütün olarak
zakius

2
Kaybedeceğinizi unutmayındata
Oleg

190

JQuery 1.6 ile bu daha zarif bir çözüm gibi görünüyor:

$('#element-of-interest').prop('outerHTML');

5
@ Jean-PhilippeLeclerc Firefox 15.0.1'de (linux) bir cazibe gibi çalışır.
dave

51

Yerel öğeyi almak için .get (0) öğesini kullanın ve bunun outerHTML özelliğini edinin:

var $elem = $('<a href="#">Some element</a>');
console.log("HTML is: " + $elem.get(0).outerHTML);

Niteliklerimi de koruduğundan çok daha iyi. Teşekkürler!
Rohit

21

Biraz daha spesifik olabilir misiniz? HTML'yi bir etiketin içine almaya çalışıyorsanız , bunun gibi bir şey yapabilirsiniz:

HTML snippet'i:

<p><b>This is some text</b></p>

jQuery:

var txt = $('p').html(); // Value of text is <b>This is some text</b>

9

Bir HTML düğümü (nesne) için hangi özelliklerin ve yöntemlerin kullanılabildiğini bulmanın en iyi yolu aşağıdaki gibi bir şey yapmaktır:

console.log($("#my-node"));

JQuery 1.6+ sürümünden, HTML etiketlerini dize çıktınıza dahil etmek için outerHTML'yi kullanabilirsiniz:

var node = $("#my-node").outerHTML;

4
öyle $('#my-node').get(0).outerHTMLmppfiles' cevabı olduğu gibi
schellmax

1
.outerHTMLbenim için çalışmadı ama .prop('outerHTML')çalıştı.
Kasım'da

7

jQuery burada, bu yüzden:

jQuery.fn.goodOLauterHTML= function() {
    return $('<a></a>').append( this.clone() ).html();
}

Tüm bu HTML öğelerini döndürün:

$('div' /*elys with HTML text stuff that you want */ ).goodOLauterHTML(); // alerts tags and all

4

Bu benim için iyi çalışıyor gibi görünüyor:

$("#id")[0].outerHTML

2
Bunu da kullanıyordum, ancak bu Firefox 6.0.1 için işe yaramıyor.
mikong

2

Kabul edilen cevap metin düğümlerini kapsamaz (tanımsız yazdırılır).

Bu kod pasajı bunu çözer:

var htmlElements = $('<p><a href="http://google.com">google</a></p>↵↵<p><a href="http://bing.com">bing</a></p>'),
    htmlString = '';
    
htmlElements.each(function () {
    var element = $(this).get(0);

    if (element.nodeType === Node.ELEMENT_NODE) {
        htmlString += element.outerHTML;
    }
    else if (element.nodeType === Node.TEXT_NODE) {
        htmlString += element.nodeValue;
    }
});

alert('String html: ' + htmlString);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


1

.Html () kullanmak için klonlamaya ve DOM'a eklemenize gerek yok, şunları yapabilirsiniz:

$('#item-of-interest').wrap('<div></div>').html()

1
Ancak wrap(), kaydırılan öğeyi döndürmez, kaydırıldığı öğeyi değil mi? Yani bu olmalıdır ait html vermek #item-of-interest değil 's ebeveyn div(jQuery en 2012 yılı Şubat ayından bu yana değişti sürece) elemanı.
David, Monica

0

jQuery.makeArray(obj)Yardımcı program işlevini kullanmak mümkün olabilir :

var obj = $('<p />',{'class':'className'}).html('peekaboo');
var objArr = $.makeArray(obj);
var plainText = objArr[0];

0

Bir HTML öğesini bir yere geçirmek ve bir öğeye geri ayrıştırmak için dizgi oluşturmak istiyorsanız, öğe için benzersiz bir sorgu oluşturmayı deneyin:

// 'e' is a circular object that can't be stringify
var e = document.getElementById('MyElement')

// now 'e_str' is a unique query for this element that can be stringify 
var e_str = e.tagName
  + ( e.id != "" ? "#" + e.id : "")
  + ( e.className != "" ? "." + e.className.replace(' ','.') : "");

//now you can stringify your element to JSON string
var e_json = JSON.stringify({
  'element': e_str
})

göre

//parse it back to an object
var obj = JSON.parse( e_json )

//finally connect the 'obj.element' varible to it's element
obj.element = document.querySelector( obj.element )

//now the 'obj.element' is the actual element and you can click it for example:
obj.element.click();

-4
new String(myobj)

Tüm nesneyi dizeye serileştirmek istiyorsanız JSON kullanın .

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.