jQuery 객체를 문자열로 어떻게 변환합니까?


답변:


602

나는 당신이 완전한 HTML 문자열을 요구한다고 가정합니다. 이 경우 다음과 같은 방법으로 트릭을 수행 할 수 있습니다.

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

여기서는 더 자세히 설명 하지만 본질적으로 관심있는 항목을 감싸고 조작하고 제거하고 HTML을 가져 오기 위해 새 노드를 만듭니다.

문자열 표현 바로 뒤에 있다면으로 이동하십시오 new String(obj).

최신 정보

2009 년에 원래의 답변을 썼습니다. 2014 년 현재 대부분의 주요 브라우저 outerHTML는 기본 속성 (예 : FirefoxInternet Explorer 참조 )으로 지원하므로 다음을 수행 할 수 있습니다.

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

25
이 작업을 수행 할 수있는 방법이 없다는 것은 짜증나지만, 이것은 상관없이 훌륭한 솔루션입니다.
Steve

2
이것은 head and body 태그를 제거합니다
ılǝ

1
@ user85461 그러나 이것은 유효한 DOM 노드가 아니므로 시작하기 위해 outerHTML을 호출하려고 시도하는 것은 잘못된 것입니다. (들어갈 수있는 것의 작은 부분 만이 $(...)유효한 DOM 노드입니다.)
John Feminella

1
그것은 당신에게 내부 HTML, 또는 더 간단을 제공 @Moss, 무엇 내부 outerHTML에 당신 요소를 제공하는 동안, 요소의 전체
zakius

2
잃어 버릴 것입니다data
Oleg

190

jQuery 1.6에서 이것은 더 우아한 솔루션 인 것 같습니다.

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

5
@ Jean-PhilippeLeclerc Firefox 15.0.1 (linux)에서는 매력처럼 작동합니다.
dave

51

.get (0)을 사용하여 기본 요소를 잡고 outerHTML 속성을 가져옵니다.

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

내 속성을 유지하는 것보다 훨씬 좋습니다. 감사!
Rohit

21

좀 더 구체적으로 할 수 있습니까? 태그 안에 HTML 을 가져 오려고하면 다음과 같이 할 수 있습니다.

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

HTML 노드 (객체)에서 사용할 수있는 속성 및 메서드를 찾는 가장 좋은 방법은 다음과 같은 작업을 수행하는 것입니다.

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

jQuery 1.6 이상에서는 outerHTML을 사용하여 문자열 출력에 HTML 태그를 포함시킬 수 있습니다.

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

4
그것은 $('#my-node').get(0).outerHTMLmppfiles의 대답과 같습니다
schellmax

1
.outerHTML나를 위해 일 .prop('outerHTML')하지 않았다.
dnns

7

jQuery가 여기에 있습니다.

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

모든 HTML 자료를 반환하십시오.

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

4

이것은 나를 위해 잘 작동하는 것 같습니다 :

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

2
나는 이것을 사용하고 있었지만 Firefox 6.0.1에서는 작동하지 않는 것 같습니다.
mikong

2

허용되는 답변에는 텍스트 노드가 포함되지 않습니다 (정의되지 않음이 인쇄 됨).

이 코드 스 니펫은 다음을 해결합니다.

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 ()을 사용하기 위해 DOM을 복제하고 추가 할 필요가 없습니다.

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

1
그러나하지 않는 wrap()랩 요소 반환 하지 가 싸여있는 요소를? 따라서 이것은 jQuery가 2012 년 2 월 이후로 변경되지 않는 한 html이 부모 요소 가 아닌 HTML을 제공 해야합니다 . #item-of-interest div
데이비드는

0

jQuery.makeArray(obj)유틸리티 기능 을 사용하는 것이 가능할 수 있습니다 .

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

0

HTML 요소를 문자열로 묶어 어딘가에 전달하고 요소로 다시 구문 분석하려면 요소에 대한 고유 쿼리를 작성하십시오.

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

...보다

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

전체 객체를 문자열로 직렬화하려면 JSON을 사용하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.