jQuery无法选择表外的单元格

我知道使用

outside

是一个无效的标记,但它仍然是HTML DOM中的一个节点。 这就是我能够看到这两个单元格呈现的原因。 jQuery无法让我获得那些细胞。 这是JSBin演示和代码

HTML

 
Cell inside table
Cells without table Cells without table

JS

 var $a = $('#a'); var numCells1 = $('.cell1').length; var numCells2 = $('.cell2').length; $a.html('Num Cell1:' + numCells1 + ' Num Cell2:' + numCells2); 

产量

 Num Cell1:1 Num Cell2:0 

为什么Num Cell2为0? 我究竟做错了什么 ?

这就是浏览器的诀窍,jQuery没有任何问题。 如果

不在table ,浏览器将不会呈现

,并且只删除所有标记,只留下纯文本。 检查浏览器中的元素面板以查看标记..没有一个cell2类的cell2

检查元素,您将看到浏览器丢弃了无效标记并且只显示文本。

在此处输入图像描述

但它仍然是HTML DOM中的一个节点

这是一个错误的假设,见3.2.1语义 :

作者不得将元素,属性或属性值用于除适当的预期语义目的之外的目的,因为这样做会阻止软件正确处理页面。

[…]

作者不得使用本规范或其他适用规范不允许的元素,属性或属性值,因为这样做会使语言在将来难以扩展。

特别是因为HTML5建议规定了特定的解析器行为,其中

只能在“in table”状态下正确解析。

也可以看看:

  • 表中的意外标记 (相关,显示表中的其他怪癖)

TR仅在TABLE内有效。 浏览器可能完全忽略了HTML的那一部分。

您始终可以使用SCRIPT标记放置您想要的任何内容

  

并使用jQuery重新创建元素:

 var tr = $( $('#something').html() );