$()在Internet Explorer中的工作方式不同吗?

kle*_*ver 9 javascript jquery internet-explorer

我在Firefox Developer Edition 38和Internet Explorer 8和9中运行以下JavaScript.

console.log('+++++++++++++++++++++++++++++++');
console.log('jquery version = ' + $.fn.jquery);
var myHtmlString = "<!-- my comment -->" +
                      "<optgroup label='my label'>" +
                        "<option value='1'>option one</option>" +
                      "</optgroup>";

console.log($(myHtmlString));
console.log($(myHtmlString)[0]);
console.log($(myHtmlString)[1]);
console.log($(myHtmlString).length);
Run Code Online (Sandbox Code Playgroud)

在Firefox中,我得到:

在此输入图像描述

在IE中,我得到:

在此输入图像描述

因此,显然在Firefox中,HTML注释作为此对象的元素被添加,但在IE中,它不是.为什么这样做,是否有错误,还是我应该创建这个对象的另一种方式?

注意:我试过,$.parseHTML(myHtmlString)但它做了同样的事情.

更新:这个答案jQuery如何处理注释元素?提供了潜在的解决方法.

Mar*_*.io 19

所以它取决于你正在使用的浏览器,但由于你传递了多个简单的标签,(作为一个例子$('<div>example html creation</div>'))jQuery让浏览器处理创建.

如果HTML比没有属性的单个标记更复杂,就像在上面的例子中那样,元素的实际创建由浏览器的.innerHTML机制处理.在大多数情况下,jQuery会创建一个新元素,并将元素的innerHTML属性设置为传入的HTML片段.

jQuery文档

例如,Firefox正在查看您的每个< >区域,并找到2.虽然IE不关心,并将其全部处理为1(因此长度为1).

长话短说,你做得很好.这只是内部浏览器如何处理它,你不必担心任何问题!

  • [我对Meta警察很抱歉](http://meta.stackoverflow.com/a/289307/560648).他们的行为有时是无法容忍的. (24认同)
  • 你实际上从Meta那里得到了很多仇恨.删除答案,因为它有一个downvote然后重新回答相同的答案. (17认同)
  • @Loko:那是一个不同的答案,小家伙. (10认同)
  • 我不确定我对这个问题的误解是什么......但这似乎就是问题所在. (2认同)
  • 我看到了,这是一个意外,实际上我编辑了整个答案(因为我离开了原来的帖子)但是没有意识到我可以"取消删除"它,而是我添加了一个*新*答案.它看起来很混乱,因为你可以看到两个答案,它们看起来完全相同,都是@Loko (2认同)
  • 这不是问题,这是我的错误,看起来两个答案都是相同的,但我应该从来没有删除答案!我并没有试图逃脱任何事情......我已经在堆栈上多年了!Downvotes是生活的一部分:) @LightningRacisinObrit (2认同)