为什么不能在 $(this) 上调用 outerHTML?

Why can't you call outerHTML on $(this)?

当你想得到HTML of an entire DOM element (wrapper included), you can do the following (as explained here):

$('#myElementId')[0].outerHTML

但是您不能做的是在 $(this) 中调用 outerHTML,例如单击侦听器或选择器函数主体范围:

$(this).outerHTML //Doesn't complete in IntelliSense, returns undefined in browser

$(this)[0].outerHTML //Correction, this DOES work, but it doesn't complete in IntelliSense

因为在那种情况下 IntelliSense 不会显示 innerHTMLouterHTML,尽管使用 vanilla JavaScript 你可以这样做:

document.getElementById($(this).attr('id')).outerHTML

所以...这是怎么回事?

您可以直接使用 this 来访问当前对象的 outerHTML 而不是间接通过 $(this) ,因为它代表 DOM 对象(它有 outerHTML 属性) 而 $(this) 表示 jQuery 对象。

this.outerHTML

jQuery 选择器 returns 一个类似数组的 jQuery 对象,没有 outerHTML 属性.

但是,jQuery 结果数组包含 DOM 个元素。
这意味着您实际上可以通过这种方式访问​​它。

$(".someClass")[0].outerHTML // it works for me

更新: 它适用于所有浏览器。
我也可以在单击事件处理程序中访问类似数组的 jQuery 对象。

$(".someClass").click(function()
{
    alert($(this)[0].outerHTML); // it works me too
});

这是我的 JSFiddle:http://jsfiddle.net/13btf60p/

更新二:

好的,现在我明白你的问题了。它应该有效。 这么简单的构造真的需要智能感知吗?

outerHTML是一个DOM属性; jQuery 不会公开所有 DOM 属性。

如果您有一个 jQuery 对象,您只能直接访问 jQuery 公开的那些属性和方法,反之亦然 DOM 对象。

在面向对象的术语中,jQuery 个对象不是继承自 DOM 个对象,而是包含它们。

$x[0] 会为 jQuery 对象表示的第一个元素获取 DOM 对象。

我将添加我发现的正确解决方案,以解决默认 Visual Studio 设置中的一个简单缺陷,以供将来参考。

因为我不想放过它,所以我进一步搜索发现,默认情况下,jQuery IntelliSense 在 Visual Studio 2013 中开箱即用,有些令人遗憾。

Tools > Options > Text Editor > Javascript > IntelliSense > References

我设置

Reference Group: "Implicit (Web)"

并添加了现有的 jQuery 文件。这解决了我的问题的所有问题,并且 IntelliSense 现在可以正确地建议所有成员和方法,尽管这应该是开箱即用的,而不是花费每个人很多时间。

this.outerHTML 就够了。

如果你使用 getElementById 也许你可以使用:

var table = document.getElementById('blablabla');