Javascript 有没有更好的方法来获得outerHtml?

Javascript 有没有更好的方法来获得outerHtml?,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我试图为jQuery元素获得一致的、跨浏览器的outerHtml,特别是$(“html”).outerHtml()。例如,如果页面源为: <html><script src="blah.js"></script><div class="foo" id='bar'></p></div></html> 我一直在用Brandon Aaron's,看起来像这样: return $('<div>').ap

我试图为jQuery元素获得一致的、跨浏览器的outerHtml,特别是
$(“html”).outerHtml()
。例如,如果页面源为:

<html><script src="blah.js"></script><div class="foo"   id='bar'></p></div></html>
我一直在用Brandon Aaron's,看起来像这样:

return $('<div>').append($("html").first().clone()).html();
return$('').append($(“html”).first().clone()).html();
然而,这实际上似乎试图重新加载文档中的任何外部引用的文件(脚本、样式表),这对于获取包装器元素的HTML源代码来说似乎太过分了。Javascript甚至可以将HTML元素放入DIV元素中吗

在本地,我得到了这个错误。与AJAX规则有关吗

无法加载XMLHttpRequestfile:///C:/demo.js?_=1311466511031. 访问控制允许原点不允许原点为null


有没有更好的方法可以到达outerHtml?我确实希望在执行此操作时避免任何网络调用。

编写了我自己的解决方案,它只是呈现包装元素:

(function($){
  $.fn.outerHtml = function() {
    if (this.length == 0) return false;
    var elem = this[0], name = elem.tagName.toLowerCase();
    if (elem.outerHTML) return elem.outerHTML;
    var attrs = $.map(elem.attributes, function(i) { return i.name+'="'+i.value+'"'; }); 
    return "<"+name+(attrs.length > 0 ? " "+attrs.join(" ") : "")+">"+elem.innerHTML+"</"+name+">";
  };
})(jQuery);
(函数($){
$.fn.outerHtml=函数(){
如果(this.length==0)返回false;
var elem=this[0],name=elem.tagName.toLowerCase();
if(elem.outerHTML)返回elem.outerHTML;
var attrs=$.map(elem.attributes,函数(i){return i.name+'=“'+i.value+''”;});
返回“+elem.innerHTML+”;
};
})(jQuery);

来自的jQuery outerHTML插件在存在时使用浏览器的原生outerHTML,作为第二个选项,克隆临时文档片段中的节点并返回其内部HTML,或者使用类似于Brandon Aaron插件的jQuery克隆解决方案

此插件可能会帮助您避免加载参考文件。在我对Chrome、Firefox和InternetExplorer的测试中,在使用外部JavaScript文件的页面中调用下面的代码时,问题并没有发生

    var outerHTML = $(document.documentElement).outerHTML(); 

您确定不需要
正文
的内部HTML吗?您使用这些数据的目的是什么?是的,非常确定。我正在验证HTML或HTML片段。是的,我知道它与HTML源代码不一样。在解析HTML时,您可以对文档的位置执行单独的HTTP请求。但是,这并不能解决片段的问题。是的,我将使用这两种方法。您的解决方案忘记了对
el.outerHTML
进行功能检测。当然这是非标准的,但至少速度更快。哦,谢谢,所以我只需要添加:
if(elem.outerHTML)返回elem.outerHTML?并彻底测试垫片是否以与
outerHTML
相同的格式返回HTML。i、 e.outerHTML可能会返回大写的标记,等等。我想我会匹配
.html()
.innerHTML
的行为,它们在IE中返回大写的标记,在真实的浏览器中返回小写的标记。我也这么认为,但我知道IE是什么样的,它做任何它喜欢做的事情,从来没有意义。彻底测试它。
    var outerHTML = $(document.documentElement).outerHTML();