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

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

573000 次浏览
new String(myobj)

如果你想将整个对象序列化为字符串,请使用JSON

我假设您要的是完整的HTML字符串。如果是这样的话,像这样的东西就可以达到目的:

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

这将在更深入的在这里中进行解释,但本质上,您将创建一个新节点来包装感兴趣的项,执行操作,删除它,并获取HTML。

如果你只是想要一个字符串表示,那么使用new String(obj)

更新

我在2009年写了最初的答案。截至2014年,大多数主流浏览器现在都支持outerHTML作为原生属性(例如,参见火狐Internet 探险家),因此您可以:

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

你能说得更具体一点吗?如果你想把超文本标记语言放到标签里面,你可以这样做:

HTML代码片段:

<p><b>This is some text</b></p>

jQuery:

var txt = $('p').html(); // Value of text is <b>This is some text</b>

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

这对我来说似乎很有效:

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

在jQuery 1.6中,这似乎是一个更优雅的解决方案:

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

找出HTML节点(对象)可用的属性和方法的最好方法是这样做:

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

从jQuery 1.6+你可以使用outerHTML包括HTML标签在你的字符串输出:

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

不需要克隆和添加到DOM使用.html(),你可以做:

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

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

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

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

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

接受的答案不包括文本节点(未定义被打印出来)。

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

.
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>

如果你想对一个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();