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

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

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

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>

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;

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

4

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

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

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>


1

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

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

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

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

-4
new String(myobj)

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

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.