jQuery,获取整个元素的 html [重复]

Posted

技术标签:

【中文标题】jQuery,获取整个元素的 html [重复]【英文标题】:jQuery, get html of a whole element [duplicate] 【发布时间】:2011-04-06 13:34:49 【问题描述】:

我希望获取所选元素的整个 html,而不仅仅是其内容。 .html() 根据文档使用 javascripts innerHTML() 方法。 HTML:

<div id="divs">
  <div id="div1">
    <p>Some Content</p>
  </div>
  <div id="div2">
    <p>Some Content</p>
  </div>
</div>

使用$('#divs:first').html(); 将只返回段落元素。我想获取整个元素的 html,如下所示:

  <div id="div1">
    <p>Some Content</p>
  </div>

我不能使用 .parent,因为这将返回两个子 div 的 html。

【问题讨论】:

【参考方案1】:

您可以克隆它以获取全部内容,如下所示:

var html = $("<div />").append($("#div1").clone()).html();

或者把它做成一个插件,大多数人倾向于称之为“outerHTML”,像这样:

jQuery.fn.outerHTML = function() 
  return jQuery('<div />').append(this.eq(0).clone()).html();
;

然后你可以打电话:

var html = $("#div1").outerHTML();

【讨论】:

这是一个很好的答案,但是 jQuery 没有实现自己的方法真的很糟糕。 它并不完美。如果 HTML 有 script 标记,则该标记中的代码将在调用 append 时运行。这可能会导致问题。【参考方案2】:

差异在典型用例中可能没有意义,但使用标准 DOM 功能

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

大约是

的两倍
$("<div />").append($("#el").clone()).html();

所以我会选择:

/* 
 * Return outerHTML for the first element in a jQuery object,
 * or an empty string if the jQuery object is empty;  
 */
jQuery.fn.outerHTML = function() 
   return (this[0]) ? this[0].outerHTML : '';  
;

【讨论】:

如果你只想要开始标签:/&lt;[^&gt;]+&gt;/.exec(elem[0].outerHTML)[0] 我也喜欢默认为空字符串,而不是允许空引用错误,漂亮、简短、甜美和稳定,谢谢。这对我很有用。 支持标准 DOM 功能,速度提高了一倍 :)【参考方案3】:

您只需一行代码即可实现这一目标:

$('#divs').get(0).outerHTML;

就这么简单。

【讨论】:

因为我是puppeteer的情况,jquery插件不是很方便,但是这一行风格正好适合puppeteer/phantomjs之类的报废脚本。【参考方案4】:

您可以使用 Jquery 的 Clone() 方法轻松获取 child 本身及其所有死者(孩子),只需

var child = $('#div div:nth-child(1)').clone();  

var child2 = $('#div div:nth-child(2)').clone();

您将在第一次查询时得到这个问题

<div id="div1">
     <p>Some Content</p>
</div>

【讨论】:

以上是关于jQuery,获取整个元素的 html [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何获取jquery元素的整个html

从 jquery 对象中获取 HTML 元素的类型 [重复]

如何在jquery中获取当前选定元素的标记名[重复]

需要使用Jquery按元素名称获取标签名称[重复]

如何获取输入数组元素jquery的所有值[重复]

jquery将元素移动到随机顺序