Jak przekonwertować obiekt jQuery na ciąg?

Odpowiedzi:

602

Zakładam, że pytasz o pełny ciąg HTML. W takim przypadku coś takiego wystarczy:

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

Wyjaśniono to tutaj bardziej szczegółowo , ale zasadniczo tworzysz nowy węzeł, aby zawinąć przedmiot zainteresowania, wykonać manipulacje, usunąć go i pobrać HTML.

Jeśli szukasz reprezentacji ciągów, idź z new String(obj).

Aktualizacja

Oryginalną odpowiedź napisałem w 2009 r. Począwszy od 2014 r. Większość głównych przeglądarek obsługuje teraz outerHTMLjako właściwość macierzystą (patrz na przykład Firefox i Internet Explorer ), dzięki czemu możesz:

$('#item-of-interest').prop('outerHTML');
John Feminella
źródło
25
Bani, że nie ma metody, aby to zrobić, ale jest to świetne rozwiązanie niezależnie od tego.
Steve
2
usuwa głowy i ciała tagi
ılǝ
1
@ user85461 Nie jest to jednak prawidłowy węzeł DOM, więc błędem byłoby rozpoczęcie od niego wywołania outerHTML. (Tylko niewielki podzbiór tego, co może wejść, $(...)to prawidłowy węzeł DOM.)
John Feminella
1
@Moss daje ci wewnętrzny html lub prościej, co jest w środku elementu, a outerHtml daje ci element jako całość
zakius
2
Zauważ, że przegraszdata
Oleg
190

W przypadku jQuery 1.6 wydaje się to bardziej eleganckie rozwiązanie:

$('#element-of-interest').prop('outerHTML');
nickh
źródło
5
@ Jean-PhilippeLeclerc W przeglądarce Firefox 15.0.1 (linux) działa jak urok.
dave
51

Wystarczy użyć .get (0), aby pobrać element macierzysty i uzyskać jego właściwość outerHTML:

var $elem = $('<a href="#">Some element</a>');
console.log("HTML is: " + $elem.get(0).outerHTML);
mppfiles
źródło
O wiele lepiej, ponieważ zachowuje również moje atrybuty. Dzięki!
Rohit,
21

Czy możesz być trochę bardziej szczegółowy? Jeśli próbujesz umieścić HTML w tagu, możesz zrobić coś takiego:

Fragment HTML:

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

jQuery:

var txt = $('p').html(); // Value of text is <b>This is some text</b>
Alex Rockwell
źródło
9

Najlepszym sposobem, aby dowiedzieć się, jakie właściwości i metody są dostępne dla węzła HTML (obiektu), jest wykonanie czegoś takiego:

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

Z jQuery 1.6+ możesz po prostu użyć outerHTML, aby dołączyć tagi HTML do twoich danych wyjściowych:

var node = $("#my-node").outerHTML;
Crystalh
źródło
4
jest $('#my-node').get(0).outerHTMLjak w odpowiedzi
mppfiles
1
.outerHTMLnie działało dla mnie, ale działało .prop('outerHTML').
dnns,
7

jQuery jest tutaj, więc:

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

Zwróć wszystkie te rzeczy HTML:

$('div' /*elys with HTML text stuff that you want */ ).goodOLauterHTML(); // alerts tags and all
Max Meents
źródło
4

Wydaje mi się, że to działa dobrze:

$("#id")[0].outerHTML
Johan Dettmar
źródło
2
Ja również tego używałem, ale wydaje się, że to nie działa w przeglądarce Firefox 6.0.1.
mikong
2

Akceptowana odpowiedź nie obejmuje węzłów tekstowych (niezdefiniowana jest drukowana).

Ten fragment kodu rozwiązuje to:

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>

Martin Sznapka
źródło
1

Aby korzystać z .html (), nie trzeba klonować i dodawać do DOM, możesz:

$('#item-of-interest').wrap('<div></div>').html()
St Kiss
źródło
1
Ale czy nie wrap()zwraca owiniętego elementu, a nie elementu, z którym został owinięty? Powinno to dać html elementu #item-of-interest nie będącego rodzicem div(chyba że jQuery zmienił się od lutego 2012 r.).
David mówi, że przywróć Monikę
0

Może być możliwe użycie jQuery.makeArray(obj)funkcji narzędzia:

var obj = $('<p />',{'class':'className'}).html('peekaboo');
var objArr = $.makeArray(obj);
var plainText = objArr[0];
duttyman
źródło
0

Jeśli chcesz skreślić element HTML, aby go gdzieś przekazać i parsować z powrotem do elementu, spróbuj utworzyć unikalne zapytanie dla elementu:

// '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
})

niż

//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();
Yaron Helfer
źródło
-4
new String(myobj)

Jeśli chcesz serializować cały obiekt do łańcucha, użyj JSON .

Wasil
źródło