如何将 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);
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

【讨论】:

谢谢,接受的答案对我不起作用。你的!【参考方案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 对象转换为字符串?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery怎么把JSON格式的字符串转换为JSON对象

如何将 html 对象转换为字符串类型?

JQuery 将字符串转换为节点对象

如何将 javascript 对象转换成 json字符串

如何将 jQuery 对象转换为 d3 对象?

将对象字符串转换为 JSON