jQuery获取包含容器本身的容器的html


156

我如何在'#container'上获取html,包括'#container'而不是仅包含其中的内容。

<div id="container">
 <div id="one">test 1 </div>
 <div id="two">test 2 </div>
 <div id="three">test 3 </div>
 <div id="four">test 4 </div>
</div>

我有这个在#container中获取html。它不包含#container元素本身。这就是我想要做的

var x = $('#container').html();
$('#save').val(x);

检查http://jsfiddle.net/rzfPP/58/


您可以将容器放入另一个容器中,并使该容器成为html ...,但这似乎有点不客气。也许,如果我们对该问题有所了解,我们可以提出一个可行的解决方案?您正在使用充满html的文本区域做什么?
Patricia

Answers:


160

如果将容器包装在虚拟P标签中,您还将获得容器HTML。

您需要做的就是

var x = $('#container').wrap('<p/>').parent().html();

http://jsfiddle.net/rzfPP/68/查看工作示例

unwrap()<p>完成后的标签,你可以添加

$('#container').unwrap();

19
@ mc10,我们可以简单地使用clone(),而您不必担心会创建额外的元素。 var x = $('#container').clone().wrap('<p/>').parent().html();。与大多数提供的解决方案相比,包装的想法很棒,分配的麻烦也更少。
Pinkie

Firefox问题已过时,因此我建议投票@MikeM答案,因为它使用的是纯JS。
罗布2013年

6
为什么要<p>加上标签?会<div>更有意义吗?
Martin Burch 2014年

6
这有一个简单得多的解决方案。看我的答案。
2015年

132
var x = $('#container').get(0).outerHTML;

更新:从FireFox 11(2012年3月)开始,Firefox现在支持此功能。

正如其他人指出的那样,这在FireFox中不起作用。如果您需要它在FireFox中工作,那么您可能想看看这个问题的答案: 在jQuery中,是否有任何类似于html()或text()的函数,但是返回匹配组件的全部内容?


6
这在Firefox中有效,并且比目前接受的解决方案好。
luqita 2014年

这是一种优雅的方法,
要比

太棒了。
Gaurav Aggarwal

这是一个完美的答案,因为用div或p包裹父标记是个坏主意。可能是您的CSS会中断。特别是在使用引导程序(例如,表单行)时。因此,这个答案是相当不错的。
Sudhir K Gupta

73

我喜欢用这个;

$('#container').prop('outerHTML');

7
对于我来说,这似乎是最好的解决方案,不需要dom操纵或伪dom操纵(wrap方法)。并且jquery对象已经具有该属性。
Nieminen

1
喜欢这个解决方案
Sameera Kumarasingha,2018年

69
var x = $('#container')[0].outerHTML;

1
Firefox问题已过时,因此我建议对该答案投赞成票。
罗布2013年

1
使用.clone()可以,但是imo更干净。接受的答案会在DOM = bad中创建新元素。
彼得

13
$('#container').clone().wrapAll("<div/>").parent().html();

更新:outerHTML现在可以在firefox上使用,因此请使用其他答案,除非您需要支持非常旧的firefox版本


externalHTML属性在Firefox上不起作用,因此您需要使用克隆来实现
Robert Noack

2

老歌但戈尔迪...

由于用户要求使用jQuery,因此我将使其保持简单:

var html = $('#container').clone();
console.log(html);

在这里摆弄。


2
这无助于检索容器本身的html。它甚至不返回html代码。我可以看到通过克隆访问目标节点以避免修改dom可能是可行的,但最好提一下为什么使用此方法。
AeonOfTime


0

Firefox不支持externalHTML,因此您需要定义一个函数来支持它:

function outerHTML(node) {
    return node.outerHTML || (
        function(n) {
            var div = document.createElement('div');
            div.appendChild( n.cloneNode(true) );
            var h = div.innerHTML;
            div = null;
            return h;
        }
    )(node);
}

然后,您可以使用outerHTML:

var x = outerHTML($('#container').get(0));
$('#save').val(x);

0
var x = $($('div').html($('#container').clone())).html();

6
您将在一个语句中创建3个jquery对象。虽然有效,但这是一个过大的杀伤力。
Pinkie

-2

一个例子的简单解决方案:

<div id="id_div">
  <p>content<p>
</div>

将此IDV移动到ID =“ other_div_id”的其他DIV

$('#other_div_id').prepend( $('#id_div') );


OP正在请求由jQuery对象表示的原始HTML,其中此方法将jQuery对象从一个位置移动到另一个位置。
西蒙·罗布
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.