我正在玩一些使用原始html和JQuery的想法.我做的一件事是创建一个包含一组行的表元素.
<table id="MyTable" >
<tr>
<td>Title</td>
</tr>
<tr>
<td>1</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>3</td>
</tr>
<tr>
<td>4</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
但是,当我在FireFox + Firebug,IE8开发人员工具栏或Google Chrome JavaScript调试器中查看代码时......所有这些代码都显示了围绕所有tr节点的tbody元素.
我并不反对这种情况......但这是标准行为吗?
我无法理解为什么以下选择器按预期工作(即获取td):
table tr td
Run Code Online (Sandbox Code Playgroud)
但这个没有:
table > tr > td
Run Code Online (Sandbox Code Playgroud)
它td是后代tr,后者又是后代table,但他们也是彼此的孩子.因此,我认为>选择器也可以工作.
我做了两个小提琴:
为什么>选择器不在这里工作?
我查看了html源代码,没有<tbody>,但是当在HTML标签中通过firebug查看时,会<tbody>出现.知道为什么吗?
HTML代码:
<table id='table'>
<tr>
<td>..</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
使用jquery的js代码:
var l1 = $('#table > tr').length;
var l2 = $('#table tr').length;
alert(l1+','+l2);?
Run Code Online (Sandbox Code Playgroud)
结果:
0,1
Run Code Online (Sandbox Code Playgroud)
为什么第一个#table > tr得到0?
您可以从这里看到现场演示:http://jsfiddle.net/Freewind/PmsFQ/
我正在用 Javascript 创建一个表,所以在一个循环中
if (formFieldData == 'cleanSlate')
{
document.getElementById('productsTable').innerHTML = '';
// clears what was there before, so we're left with an empty <table>
} else
{
document.getElementById('productsTable').innerHTML += '<tr></tr>';
}
Run Code Online (Sandbox Code Playgroud)
经过几次迭代后,我剩下的是这个..不知道如何在没有尖括号的情况下为您显示 HTML: tbody tr /tr /tbody tbody tr /tr /tbody
为什么它要插入这些 tbody,我怎样才能阻止它这样做?
我有这个简单的例子
<table border="1px">
<tr>
<td> </td>
<td> <input type="button" value="Click" onclick="insertText()"/> </td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
我想获得(第一个)tr元素的第一个td元素,我试过:
var td = document.getElementsByTagName("table")[0].children[0].children[0];
Run Code Online (Sandbox Code Playgroud)
因为它是:
var td = document.getElementsByTagName("table")[0] 对于表元素本身children[0] 对于tr元素children[0]再次为第一个TD元素 这就是我的想法,但显然这会让我返回tr元素而只添加另一个.children[0]让我获得td元素.
var td = document.getElementsByTagName("table")[0].children[0].children[0].children[0];
Run Code Online (Sandbox Code Playgroud)
为什么这样,或者我错过了什么?
我看到一些HTML5设计师<tbody>在标记表时忽略了该元素.他们只使用<thead>和<tfoot>元素.这可以被视为一种良好的做法并遵循HTML5中的良好标准吗?
这个问题基于我之前的问题,可以在以下网址找到:
<thead><tbody><tfoot>这个问题是关于<tbody>从标记中删除所有内容的可能性.我有CSS :hover类的问题.如何禁用:hover第二行内的第二个表类.
这是小提琴
HTML
<table border="0" width="100%" id="product-table">
<tr>
<td colspan="2">Title of the table</td>
</tr>
<tr>
<td width="20%"><b>Text text</b></td>
<td>someting about product</td>
</tr>
<tr>
<td><b>text text</b></td>
<td>
<table border="0" width="100%">
<thead>
<tr bgcolor="#ddd">
<td colspan="6"><strong>Title of inside</strong></td>
</tr>
<tr bgcolor="#efefef">
<td width="20%"><strong>No</strong></td>
<td width="20%"><strong>Date</strong></td>
<td width="20%"><strong>Define</strong></td>
</tr>
</thead>
<tbody id="hat_ekle">
<tr>
<td>123</td>
<td>2013</td>
<td>some text</td>
</tr>
<tr>
<td>234</td>
<td>2013</td>
<td>some text</td>
</tr>
</tbody>
</table>
</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
CSS
#product-table tr:hover { background:#333; }
Run Code Online (Sandbox Code Playgroud) 当我们升级到jQuery 1.7.1时,此代码停止工作. $('table.className > tr').length正在返回0.你能告诉我如何纠正它吗?
.NET代码(执行jQuery代码):
public static long GetTableRowCountByCssClass(IWebDriver driver, string cssClass, int exclusionRowCount)
{
IJavaScriptExecutor js = driver as IJavaScriptExecutor;
long count = (long)js.ExecuteScript("return $('table." + cssClass + " > tr').length");
if (count != 0)
{
count = count - exclusionRowCount;
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
HTML代码:
<!-- Products -->
<table class="cart" cellpadding="0" cellspacing="0" border="0">
<thead>
<tr>
<th class="remove">Delete</th>
<th class="prod-desc">Product Description</th>
<th class="ships_w">Ships Within</th>
<th class="price">Unit Price</th>
<th> </th>
<th class="quantity">Qty.</th>
<th class="totals">Total</th>
</tr>
</thead>
<tfoot>
<tr>
<td …Run Code Online (Sandbox Code Playgroud)