Câu trả lời:
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)
.
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ợ outerHTML
như một tài sản riêng (ví dụ: xem Firefox và Internet Explorer ), vì vậy bạn có thể làm:
$('#item-of-interest').prop('outerHTML');
$(...)
là một nút DOM hợp lệ.)
data
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>
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;
$('#my-node').get(0).outerHTML
như trong mppfiles' câu trả lời
.outerHTML
không làm việc cho tôi, nhưng .prop('outerHTML')
đã làm.
Điều này dường như làm việc tốt cho tôi:
$("#id")[0].outerHTML
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>
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()
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ải là div
phần tử mẹ (trừ khi jQuery thay đổi kể từ tháng 2 năm 2012).
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();