这是一个示例html:
<form action="/opac-prod/search/briefListSearch.do" method="post" name="search_BrowseSearchHitsForm">
<table id="printTable" width="100%" align="center" dir="ltr">
<tbody>
<tr>
<td style="font-family:tahoma;font-size:11px">
<table border="0" align="right" cellspacing="0">
<tbody>
-- I want to get just this level tr tags , not in their children
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
我想获取所有标记在tr
但不是所有级别的html元素。我的意思是如果我使用foreach循环来执行此操作,我实际上无法做到这一点。因为我希望在只最后tr
标记中获取所有tbody
标记(它们内部具有相同的代码),而不是在他们的孩子中。
我怎么能这样做?
我尝试使用此foreach循环,但它会在tr
之后的每个LoopElement
标记处继续:
var htmlElement = wb.Document.GetElementsByTagName("body")[0].GetElementsByTagName("form")[0].GetElementsByTagName("table")["printTable"];
if (htmlElement != null)
{
var elements = htmlElement.GetElementsByTagName("tbody")[0].GetElementsByTagName("tr")[0].GetElementsByTagName("td")[0].GetElementsByTagName("table")[0].GetElementsByTagName("tbody")[0];
foreach (HtmlElement element in elements.GetElementsByTagName("tr"))
{
if (element.GetElementsByTagName("td")[0].GetElementsByTagName("table") != null)
{
try
{
var LoopElement =
element.GetElementsByTagName("td")[0].GetElementsByTagName("table")[0].GetElementsByTagName("tbody")[0].GetElementsByTagName("tr");
foreach (HtmlElement element1 in LoopElement)
{
// This Loop
}
}
catch
{
continue;
}
}
}
答案 0 :(得分:0)
<style>
tbody tr:first-of-type {
text-align: left;
}
</style>
使用上面的代码来定位tbody的tr元素的第一个。
但是在您的代码中,您使用的是两个tbody标记,只需为其提供不同的ID first
和second
。
然后你可以像这样定位second
元素:
<style>
#second tr:first-of-type {
text-align: left;
}
</style>