2014-03-05 37 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()); 
相關問題