如何将 jQuery 对象转换为字符串?
Posted
技术标签:
【中文标题】如何将 jQuery 对象转换为字符串?【英文标题】:How do you convert a jQuery object into a string? 【发布时间】:2010-10-13 18:11:39 【问题描述】:【问题讨论】:
【参考方案1】:我假设您要的是完整的 html 字符串。如果是这样的话,这样的事情就可以解决问题:
$('<div>').append($('#item-of-interest').clone()).html();
这在here 中得到了更深入的解释,但本质上,您创建一个新节点来包装感兴趣的项目,进行操作,删除它,然后获取 HTML。
如果您只是在使用字符串表示形式,请使用new String(obj)
。
更新
我在 2009 年写了最初的答案。截至 2014 年,大多数主流浏览器现在都支持 outerHTML
作为本机属性(例如,请参阅 Firefox 和 Internet Explorer),因此您可以这样做:
$('#item-of-interest').prop('outerHTML');
【讨论】:
很糟糕,没有一种方法可以做到这一点,但无论如何这都是一个很好的解决方案。 这会删除头部和身体标签 @user85461 不过,这不是一个有效的 DOM 节点,因此一开始就尝试在其上调用 outerHTML 是错误的。 ($(...)
中只有一小部分是有效的 DOM 节点。)
@Moss 它为您提供内部 html,或者更简单地说,元素的 inside 是什么,而 outerHtml 为您提供元素 作为一个整体
请注意,您将失去data
【参考方案2】:
使用 jQuery 1.6,这似乎是一个更优雅的解决方案:
$('#element-of-interest').prop('outerHTML');
【讨论】:
@Jean-PhilippeLeclerc 在 Firefox 15.0.1 (linux) 上它就像一个魅力。【参考方案3】:只需使用 .get(0) 获取原生元素,并获取其 outerHTML 属性:
var $elem = $('<a href="#">Some element</a>');
console.log("HTML is: " + $elem.get(0).outerHTML);
【讨论】:
更好,因为它也保留了我的属性。谢谢!【参考方案4】:你能说得更具体一点吗?如果您尝试在标签中获取HTML,您可以执行以下操作:
HTML sn-p:
<p><b>This is some text</b></p>
jQuery:
var txt = $('p').html(); // Value of text is <b>This is some text</b>
【讨论】:
【参考方案5】:找出可用于 HTML 节点(对象)的属性和方法的最佳方法是执行以下操作:
console.log($("#my-node"));
从 jQuery 1.6+ 开始,您可以只使用 outerHTML 在字符串输出中包含 HTML 标记:
var node = $("#my-node").outerHTML;
【讨论】:
它是$('#my-node').get(0).outerHTML
在 mppfiles 的回答中
.outerHTML
对我不起作用,但 .prop('outerHTML')
对我有用。【参考方案6】:
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
【讨论】:
【参考方案7】:这对我来说似乎很好用:
$("#id")[0].outerHTML
【讨论】:
我也在使用这个,但这似乎不适用于 Firefox 6.0.1。【参考方案8】:接受的答案不包括文本节点(未定义被打印出来)。
这段代码sn-p解决了:
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>
【讨论】:
谢谢,接受的答案对我不起作用。你的!【参考方案9】:使用.html()不需要克隆和添加到DOM,你可以这样做:
$('#item-of-interest').wrap('<div></div>').html()
【讨论】:
但是wrap()
不返回被包裹的元素,不是被包裹的元素吗?所以这个应该给出#item-of-interest
的html not它的父div
元素(除非jQuery自2012年2月起改变了)。【参考方案10】:
也许可以使用jQuery.makeArray(obj)
实用函数:
var obj = $('<p />','class':'className').html('peekaboo');
var objArr = $.makeArray(obj);
var plainText = objArr[0];
【讨论】:
【参考方案11】:如果您想对 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();
【讨论】:
【参考方案12】:new String(myobj)
如果要将整个对象序列化为字符串,请使用JSON。
【讨论】:
以上是关于如何将 jQuery 对象转换为字符串?的主要内容,如果未能解决你的问题,请参考以下文章