我试图用jQuery获取所选对象的HTML。我知道.html()函数;问题是我需要包含所选对象的HTML(在本例中为表行,其中.HTML()仅返回行内的单元格)。
我四处搜索,发现了一些非常“黑客”类型的方法来克隆对象,将其添加到新创建的div等,但这似乎真的很肮脏。有没有更好的方法,或者jQuery(1.4.2)的新版本是否提供任何类型的outerHtml功能?
我试图用jQuery获取所选对象的HTML。我知道.html()函数;问题是我需要包含所选对象的HTML(在本例中为表行,其中.HTML()仅返回行内的单元格)。
我四处搜索,发现了一些非常“黑客”类型的方法来克隆对象,将其添加到新创建的div等,但这似乎真的很肮脏。有没有更好的方法,或者jQuery(1.4.2)的新版本是否提供任何类型的outerHtml功能?
当前回答
纯JavaScript:
var outerHTML = function(node) {
var div = document.createElement("div");
div.appendChild(node.cloneNode(true));
return div.innerHTML;
};
其他回答
我同意Arpan的观点(2010年12月13日5:59)。
他的做法实际上是更好的做法,因为你不用克隆。如果您有子元素,克隆方法非常耗时,而且其他人似乎都不关心IE是否具有outerHTML属性(是的,IE实际上有一些有用的技巧)。
但我可能会创作一个有点不同的剧本:
$.fn.outerHTML = function() {
var $t = $(this);
if ($t[0].outerHTML !== undefined) {
return $t[0].outerHTML;
} else {
var content = $t.wrap('<div/>').parent().html();
$t.unwrap();
return content;
}
};
要将完整的jQuery插件制作为.outerHTML,请将以下脚本添加到任何js文件中,并在jQuery之后包含在头中:
更新新版本有更好的控制,以及更友好的jQuery选择器服务!:)
;(function($) {
$.extend({
outerHTML: function() {
var $ele = arguments[0],
args = Array.prototype.slice.call(arguments, 1)
if ($ele && !($ele instanceof jQuery) && (typeof $ele == 'string' || $ele instanceof HTMLCollection || $ele instanceof Array)) $ele = $($ele);
if ($ele.length) {
if ($ele.length == 1) return $ele[0].outerHTML;
else return $.map($("div"), function(ele,i) { return ele.outerHTML; });
}
throw new Error("Invalid Selector");
}
})
$.fn.extend({
outerHTML: function() {
var args = [this];
if (arguments.length) for (x in arguments) args.push(arguments[x]);
return $.outerHTML.apply($, args);
}
});
})(jQuery);
这将使您不仅可以获得一个元素的outerHTML,甚至可以同时获得多个元素的Array返回!并且可以在以下两种jQuery标准样式中使用:
$.outerHTML($("#eleID")); // will return outerHTML of that element and is
// same as
$("#eleID").outerHTML();
// or
$.outerHTML("#eleID");
// or
$.outerHTML(document.getElementById("eleID"));
对于多个元素
$("#firstEle, .someElesByClassname, tag").outerHTML();
代码段示例:
console.log('$.outerHTML($(“#eleID”))'+“\t”,$.outrHTML($”#eleID“)));console.log('$(“#eleID”).outerHTML()'+“\t\t”,$(“#eleID”;console.log('$(“#firstEle,.someElesByClassname,tag”).outerHTML()'+“\t”,$(“#firstEle”,.someElesByClassname,tag“).outrHTML());var checkThisOut=$(“div”).outerHTML();console.log('var checkThisOut=$(“div”).outerHTML();'+“\t\t”,选中ThisOut);$.each(checkThisOut,函数(i,str){$(“div”).eq(i).text(“My outerHTML Was:”+str);});<script src=“https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js“></script><script src=“https://rawgit.com/JDMcKinstry/ce699e82c7e07d02bae82e642fb4275f/raw/deabd0663adf0d12f389ddc03786468af4033ad2/jQuery.outerHTML.js“></script><div id=“eleID”>这将</div><div id=“firstEle”>被替换</div><div class=“someElesByClassname”>运行时</div><h3><tag>打开控制台以查看结果</tag></h3>
关于:prop('outerHTML')呢?
var outerHTML_text = $('#item-to-be-selected').prop('outerHTML');
要设置:
$('#item-to-be-selected').prop('outerHTML', outerHTML_text);
这对我有用。
PS:这是jQuery1.6中添加的。
jQuery插件作为直接获取整个元素HTML的速记:
jQuery.fn.outerHTML = function () {
return jQuery('<div />').append(this.eq(0).clone()).html();
};
并像这样使用:$(“.element”).outerHTML();
另一个类似的解决方案添加了临时DOM对象的remove()。