jQuery:外部html()

vor*_*bey 321 jquery

可能重复:
获取所选元素的外部HTML

想象我们有这样的东西:

<div id="xxx"><p>Hello World</p></div>
Run Code Online (Sandbox Code Playgroud)

如果我们以这种方式调用.html函数:

$("#xxx").html();
Run Code Online (Sandbox Code Playgroud)

我们将得到:

<p>Hello World</p>
Run Code Online (Sandbox Code Playgroud)

但我需要得到:

<div id="xxx"><p>Hello World</p></div>
Run Code Online (Sandbox Code Playgroud)

那么,我需要做什么?我想在#xxx周围添加另一个包装器,但这不是一个好主意.

And*_*ndy 1149

只需使用标准DOM功能:

$('#xxx')[0].outerHTML
Run Code Online (Sandbox Code Playgroud)

outerHTML得到很好的支持 - 在Mozillacaniuse验证.

  • 另一种选择:$('#xxx').prop('outerHTML') (274认同)
  • 请记住,截至 2015 年 4 月,SVG 元素在所有浏览器中仍然没有 externalHTML 属性,请参阅:http://stackoverflow.com/a/20559830/656010 (11认同)
  • 更新:自从将'prop()`添加到jQuery源代码后,现在可以更加简洁了:`$('#xxx').prop('outerHTML');` (10认同)
  • 请记住,这种方法不会在html中执行javascript,而接受HTML字符串的jQuery方法可以执行代码. (4认同)
  • 请记住,这种方法只给**第一个**元素的`outerHTML`,例如`$('<i> a </ i> <b> b </ b>')[0] .outHTML`将返回`<i> a </ i>`,而不是`<i> a </ i> <b> b </ b>`. (2认同)

Dav*_*ang 202

创建一个临时因素,然后clone()append():

$('<div>').append($('#xxx').clone()).html();
Run Code Online (Sandbox Code Playgroud)

  • 我投了票,因为这是解决一个简单问题的非常迂回的方法.请参阅VanillaJS的文档:https://developer.mozilla.org/en-US/docs/Web/API/element.outerHTML (64认同)
  • 这是开启"jQuery blinders"的一个很好的例子,因为简单的JS解决方案(参见下面的Andy解决方案)要简单得多. (39认同)
  • @jamietre,是的,因为`.append()`总是*移动*元素. (4认同)
  • 这似乎是一个过于复杂的重量级解决方案.我更喜欢使用简单的dom outerHTML属性. (3认同)
  • 此解决方案更好,因为在某些特殊情况下可能会缺少externalHTML属性。 (2认同)

ezm*_*use 70

没有兄弟姐妹解决方案:

var x = $('#xxx').parent().html();
alert(x);
Run Code Online (Sandbox Code Playgroud)

通用解决方案

// no cloning necessary    
var x = $('#xxx').wrapAll('<div>').parent().html(); 
alert(x);
Run Code Online (Sandbox Code Playgroud)

在这里小提琴:http://jsfiddle.net/ezmilhouse/Mv76a/

  • 如果父母有其他孩子,将无法工作. (25认同)
  • 也没有父母. (13认同)
  • 在给出的例子中,没有兄弟姐妹. (3认同)