Làm thế nào để bạn chuyển đổi một đối tượng jQuery thành một chuỗi?


Câu trả lời:


602

Tôi giả sử bạn đang yêu cầu chuỗi HTML đầy đủ. Nếu đó là trường hợp, một cái gì đó như thế này sẽ thực hiện mẹo:

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

Điều này được giải thích sâu hơn ở đây , nhưng về cơ bản, bạn tạo một nút mới để bọc mục quan tâm, thực hiện các thao tác, xóa nó và lấy HTML.

Nếu bạn chỉ sau một chuỗi đại diện, sau đó đi với new String(obj).

Cập nhật

Tôi đã viết câu trả lời ban đầu vào năm 2009. Kể từ năm 2014, hầu hết các trình duyệt chính hiện nay đều hỗ trợ outerHTMLnhư một tài sản riêng (ví dụ: xem FirefoxInternet Explorer ), vì vậy bạn có thể làm:

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

25
Thật tệ khi không có phương pháp nào để làm điều này, nhưng đây là một giải pháp tuyệt vời.
Steve

2
điều này loại bỏ đầu và thân thẻ
ılǝ

1
@ user85461 Tuy nhiên, đó không phải là một nút DOM hợp lệ, do đó, sẽ rất sai khi cố gắng gọi outsHTML trên đó để bắt đầu. (Chỉ một tập hợp con nhỏ của những gì có thể đi vào $(...)là một nút DOM hợp lệ.)
John Women'sella

1
@Moss nó cung cấp cho bạn html bên trong, hoặc đơn giản hơn, bên trong phần tử là gì , trong khi outsHtml cung cấp cho bạn toàn bộ
zakius

2
Lưu ý rằng bạn sẽ thuadata
Oleg

190

Với jQuery 1.6, đây dường như là một giải pháp thanh lịch hơn:

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

5
@ Jean-PhilippeLeclerc Trên Firefox 15.0.1 (linux) nó hoạt động như một bùa mê.
dave

51

Chỉ cần sử dụng .get (0) để lấy phần tử gốc và lấy thuộc tínhHTML bên ngoài của nó:

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

Vì vậy, tốt hơn nhiều vì nó giữ lại các thuộc tính của tôi là tốt. Cảm ơn!
Rohit

21

Bạn có thể cụ thể hơn một chút? Nếu bạn đang cố gắng để có được HTML bên trong thẻ, bạn có thể làm một cái gì đó như thế này:

Đoạn mã 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

Cách tốt nhất để tìm ra các thuộc tính và phương thức nào có sẵn cho một nút (đối tượng) HTML là làm một cái gì đó như:

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

Từ jQuery 1.6+, bạn chỉ có thể sử dụng bên ngoàiHTML để bao gồm các thẻ HTML trong đầu ra chuỗi của mình:

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

4
$('#my-node').get(0).outerHTMLnhư trong mppfiles' câu trả lời
schellmax

1
.outerHTMLkhông làm việc cho tôi, nhưng .prop('outerHTML')đã làm.
dnns

7

jQuery ở đây, vì vậy:

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

Trả lại tất cả những thứ HTML đó:

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

4

Điều này dường như làm việc tốt cho tôi:

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

2
Tôi cũng đang sử dụng cái này nhưng cái này dường như không hoạt động với Firefox 6.0.1.
mikong

2

Câu trả lời được chấp nhận không bao gồm các nút văn bản (không xác định được in ra).

Đoạn mã này giải quyết nó:

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

Không cần sao chép và thêm vào DOM để sử dụng .html (), bạn có thể làm:

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

1
Nhưng không wrap()trả về phần tử được bọc, không phải phần tử được gói? Vì vậy, điều này sẽ cung cấp cho html của phần tử #item-of-interest không phảidivphần tử mẹ (trừ khi jQuery thay đổi kể từ tháng 2 năm 2012).
David nói phục hồi Monica

0

Có thể sử dụng jQuery.makeArray(obj)chức năng tiện ích:

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

0

Nếu bạn muốn xâu chuỗi một phần tử HTML để chuyển nó đi đâu đó và phân tích lại thành phần tử thử bằng cách tạo một truy vấn duy nhất cho phần tử:

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

hơn

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

Nếu bạn muốn tuần tự hóa toàn bộ đối tượng thành chuỗi, hãy sử dụng JSON .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.