如何将jQuery对象转换为字符串?

433

如何将jQuery对象转换为字符串?

12个回答

649

我假设你想要完整的HTML字符串。如果是这种情况,以下类似代码可以完成:

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

这在这里更深入地解释了,但基本上您需要创建一个新节点来包装所需项目,进行操作,然后将其删除并获取HTML。

如果您只想要一个字符串表示,则使用new String(obj)

更新

我在2009年编写了最初的答案。截至2014年,大多数主流浏览器现在支持outerHTML作为本地属性(例如,FirefoxInternet Explorer),因此您可以执行以下操作:

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

28
没有一种简单的方法可以做到这一点,但尽管如此,这仍然是一个很好的解决方案。 - Steve
2
这将删除头部和正文标签。 - ılǝ
1
@user85461,那不是一个有效的DOM节点,因此尝试调用outerHTML是错误的。(只有$(...)中的一小部分内容是有效的DOM节点。) - John Feminella
1
@Moss 它给你内部HTML,或者更简单地说,元素的 内部内容 ,而outerHtml则给出元素 作为一个整体 - zakius
2
请注意,您将失去“数据”。 - Oleg
显示剩余7条评论

207

使用jQuery 1.6,这似乎是一种更优雅的解决方案:

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

5
在Firefox 15.0.1(Linux版本)中,它运行得非常好。 - dave

57

只需使用.get(0)来获取原生元素,并获取其outerHTML属性:

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

非常好,因为它还保留了我的属性。谢谢! - Rohit

23

你能具体说明一下吗?如果你想要获取标签内的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>

10

查找HTML节点(对象)可用属性和方法的最佳方式是执行以下操作:

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

从 jQuery 1.6+ 开始,您只需使用 outerHTML 将 HTML 标签包含在字符串输出中:

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

5
就像mppfiles回答的那样,它是$('#my-node').get(0).outerHTML - schellmax
1
.outerHTML 对我没用,但是 .prop('outerHTML') 有效。 - dnns

8

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

5
这对我来说似乎没有问题:
$("#id")[0].outerHTML

2
我之前也在使用这个,但是似乎不支持Firefox 6.0.1。 - mikong

5

被接受的答案没有涵盖文本节点(会打印出未定义)。

这段代码片段解决了这个问题:

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
谢谢,伙计。被采纳的答案对我没用,而你的有用! - Tom

1

不需要克隆并添加到DOM中才能使用.html(),你可以这样做:

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

1
但是 wrap() 不是返回被包装的元素,而不是用它进行包装的元素吗?所以这应该会给出 #item-of-interest 的 HTML,而不是它的父级 div 元素(除非 jQuery 自 2012 年 2 月以来已经更改了)。 - David Thomas
看到这篇文章已经十年了。我刚刚检查了一下,你是对的,换行搞砸了它。它本来应该是$('#item-of-interest').wrap('<div></div>').parent().html()。但现在,在更新的答案中有更好的原生解决方案。 - skiss

0

可以尝试使用 jQuery.makeArray(obj) 实用函数:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接