本问题已经有最佳答案,请猛点这里访问。
我希望得到所选元素的整个HTML,而不仅仅是其内容。.html()根据文档使用javascripts innerhtml()方法。HTML:
Some Content
Some Content
使用$('#divs:first').html();只返回paragraph元素。我想获取整个元素的HTML,如下所示:
Some Content
我不能使用.parent,因为这将返回两个子div的html。
您可以克隆它以获取整个内容,如下所示:
var html = $("").append($("#div1").clone()).html();
或者让它成为一个插件,大多数人倾向于称之为"outerhtml",比如:
jQuery.fn.outerHTML = function() {
return jQuery('').append(this.eq(0).clone()).html();
};
然后你可以打电话给:
var html = $("#div1").outerHTML();
这是一个很好的答案,但jquery没有实现自己的方法真的很糟糕。
它并不完美。如果HTML有一个script标记,则当调用append时,此标记中的代码将运行。可能会引起问题。
在典型的用例中,差异可能没有意义,但是使用标准的DOM功能
$("#el")[0].outerHTML
大约是速度的两倍
$("").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 : '';
};
如果你只想要开头的标签:/]+>/.exec(elem[0].outerHTML)[0]。
imho这应该是公认的答案-特别是考虑到.clone()的性能影响
我也喜欢默认为空字符串,而不是允许空引用错误,好的,短的,甜的和稳定的,谢谢。这对我很有用。
支持标准的DOM功能,速度快了两倍:)
只需一行代码就可以实现这一点。
$('divs').get(0).outerhtml;
就这么简单。
这对我很有用,谢谢。
又矮又棒!谢谢!
因为我现在使用的是puppeteer,jquery插件不太方便,但是这种单行样式非常适合puppeteer/phantomjs,比如废弃脚本。
通过jquery的clone()方法,您可以很容易地获得子对象本身及其所有的死者(子对象),只是
var child = $('#div div:nth-child(1)').clone();
var child2 = $('#div div:nth-child(2)').clone();
如有疑问,您将在第一个查询中获得此信息。
Some Content
这样编写HTML:
然后.html()函数获取img标记!您可以在任何地方附加。:)