2014-03-05 38 views
2

我知道使用<td>以外<table>是无效的标记,但它仍然是HTML DOM中的一个节点。这就是为什么我能够看到这两个单元格呈现。 jQuery无法让我看到这些单元格。这里是JSBin Demo和代码jQuery无法选择表格外部的单元格

HTML

<table> 
    <tr><td class='cell1'>Cell inside table</td></tr> 
</table> 

<tr> 
    <td class='cell2'>Cells without table</td> 
    <td class='cell2'>Cells without table</td> 
</tr> 

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 

为什么民小区2为0?我究竟做错了什么 ?

+0

你的第二个查询更改为'$(“TD”) .length'结果为'1' ...所以我想无效的标记被忽略。有趣。 –

+0

请注意,您可以在jQuery中创建partials(不在文档中的DOM元素层次结构),并稍后将它们插入到文档中。如下所述,您不能将不正确的元素放入文档本身。 –

+0

@JimCote我明白,但我的疑问是为什么浏览器删除'​​'标签,但不是''标签在这种情况下http://jsbin.com/wimixxi/2/edit?html,css,js,output – sachinjain024

回答

6

这是浏览器在做它的伎俩,没有错误的jQuery。如果浏览器不在table之内,它将不会呈现<tr>,并且只会剥去所有标签,而不显示纯文本。检查你的元素在浏览器面板看到的标记..没有一个类的元素cell2

4

检查元素,你会看到浏览器扔掉无效标记,只是显示文本。

enter image description here

+0

Isn它不是很奇怪,它扔掉了''标签。浏览器不会丢弃无效的HTML标签。看到这个http://jsbin.com/wimixxi/2/edit?html,css,js,输出 – sachinjain024

+0

@blunderboy好,它确实扔掉了。至少它在你在评论中提供的jsBin中做过。 – matewka

+0

@blunderboy这是一个自定义标记,而不是无效的标记检查了这一点http://stackoverflow.com/questions/2802687/is-there-a-way-to-create-your-own-html-tag-in-html5 http://stackoverflow.com/questions/9845011/are-custom-elements-valid-html5 –

1

,但它仍然是在HTML DOM

这是一个错误的假设一个节点,见3.2.1 Semantics

创作者不应该使用元素,属性或属性值的目的不同于其适当的预期语义目的,因为这样做会阻止软件正确处理页面。

[...]

作者必须不能使用的元素,属性或属性不是由本说明书或其他适用的规格允许值,因为这样做使得显著更难语言来在延长未来。

特别是由于HTML5建议规定了特定的解析器行为,其中<tr>只能在“在表格”状态下正确解析。

参见:

1

TR只是一个表内有效。浏览器可能完全忽略了HTML的这一部分。

您可以随时使用SCRIPT标签把任何你想要的内

<script id="something" type="text/template"><tr><td>whatever</td></tr></script> 

和使用jQuery来重建元素:

var tr = $($('#something').html()); 
相关问题