为什么这个jQuery选择器没有选择任何东西?

Sub*_*Dev 2 html javascript jquery dom

这是一个简单的问题,快速代码转储.我有

$insides = $('<thead><tr><th><!--Blank space --></th></tr></thead><tbody><tr class="green-row"><td>Opportunities to Date</td></tr><tr><td>Number of wins</td></tr><tr><td>Number of active deals</td></tr><tr><td>Number of persmission to pursue</td></tr><tr><td>Number of persmission to contact</td></tr><tr><td>Number of deals lost</td></tr><tr><td>Number of deals disqualified</td></tr><tr><td id="deal%-0365">% deals with ...<input class="filterer" type="checkbox" checked="true"/></td></tr><tr><td id="deal%-VM">% deals with ...<input class="filterer" type="checkbox" checked="true"/></td></tr><tr><td id="deal%-AM">% deals with ...<input class="filterer" type="checkbox" checked="true"/></td></tr><tr><td>Current total pipeline value</td></tr></tbody></table>');
for ( var region in this.DealsByRegion ) 
{
    $insides.find('thead > tr').append('<th class="region" id="region-' + region + '">' + region + '<input class="filterer" type="checkbox" checked="true"</input>');
}
Run Code Online (Sandbox Code Playgroud)

它没有用,因为

$insides.find('thead > tr')
Run Code Online (Sandbox Code Playgroud)

没有返回任何东西(即$insides.find('thead > tr').length = 0).为什么?不是<tr><th><!--Blank space --></th></tr>一个孩子的thead后代$insides吗?

jeh*_*na1 6

那是因为$insides变量中的当前根元素已经是一个thead节点.所以下面的代码:

$insides.find('thead > tr')
Run Code Online (Sandbox Code Playgroud)

转换为css选择器

thead thead > tr
Run Code Online (Sandbox Code Playgroud)

更合适的选择器是:

$insides.filter('thead').children('tr')
Run Code Online (Sandbox Code Playgroud)

  • 使用`$ insides.children("tr")`将选择所有行,我最好使用`$ insides.filter('thead').children('tr');` (4认同)
  • @SubparWebDev:你不应该.你实际上做的是正确和直观的.本机`querySelectorAll`表现正常,但jQuery*故意*通过任意决定整个选择器应该被解释为仅应用于子结构的内容而不是像其他每个CSS选择器一样应用于整个文档. (2认同)