jQuery如何处理子选择器或者我错过了明显的错误?当孩子不是*
时,我无法让它工作。
这是我正在运行的jQuery选择器:
$("#myTable > tr").each(function() {
// do somthing }
);
表结构是:
<table id="myTable">
<tr>
<td><button>someButton</button></td>
<td><textarea>...</textarea></td>
</tr>
</table>
没有元素与上面的选择器#myTable > tr
匹配。但下面列出的两个选择器工作正常。
$("#myTable tr") // search all descendants for tr
或使用通配符匹配孩子:
$("#myTable > *") // search all child elements
关于这里可能出现什么问题的任何想法?
感谢快速回答的人!不幸的是只能选择一个。
答案 0 :(得分:10)
这是因为如果没有提供tbody
元素,Firefox会自动添加tr
个元素。你真的不能使用table > tr
。
你有:
<table id="myTable">
<tr>
<td><button>someButton</button></td>
<td><textarea>...</textarea></td>
</tr>
</table>
但Firefox看到了这个:
<table id="myTable">
<tbody>
<tr>
<td><button>someButton</button></td>
<td><textarea>...</textarea></td>
</tr>
</tbody>
</table>
其他元素可以正常使用:
<div>
<strong>Hi</strong>
</div>
选择器:
alert( $("div > strong").text() ); // Alerts "Hi"
答案 1 :(得分:5)
有一个隐含的<tbody>
元素,而不是:
<table id="myTable">
<tr>
<td><button>someButton</button></td>
<td><textarea>...</textarea></td>
</tr>
</table>
DOM实际上包含:
<table id="myTable">
<tbody>
<tr>
<td><button>someButton</button></td>
<td><textarea>...</textarea></td>
</tr>
</tbody>
</table>
所以将其改为:
$("#mytable > tbody > tr");
在表格中使用<tbody>
,<thead>
和<tfoot>
元素是一个很好的习惯。
答案 2 :(得分:1)
DOM是浏览器对您发送的HTML的解释。