tr
не находится прямо внутри table
, хотя это выглядит так из вашей разметки. Каждая строка помещается внутри элемента thead
, tbody
или tfoot
, и если вы пропустите начальный тег <tbody>
, браузер вставит его для вас без вывода сообщений. Таким образом, чтобы выбрать строку, вы должны сказать:
table>tbody>tr
Это связано с причудой разбора HTML, когда во многих случаях разрешено пропускать стартовые теги (например, если вы опустите <body>
, браузер предположит, что он был там в первый раз, когда встречается с содержимым страницы) .
Тем не менее, XHTML имеет более регулярные правила синтаксического анализа, и в результате этого, если страница анализируется в режиме XML, не будет подразумеваться tbody
. Поэтому сложнее написать селектор, который будет совпадать в обоих случаях.
Кроме того, селектор nth
является нестандартным расширением jQuery для селекторов, что приведет к тому, что медленный селекторный движок JavaScript «Sizzle» будет использоваться вместо быстрого встроенного в браузер селекторного движка (если он есть, т.е. IE6-7). Старайтесь придерживаться стандартных селекторов CSS, чтобы избежать этого.
Лучше всего избегать обеих проблем, используя обход в стиле DOM вместо селекторов, чтобы получить нужный элемент. Сам DOM предлагает списки rows
и cells
для таблиц и строк, что, вероятно, проще, чем все, что предлагает jQuery:
var table= $('#someselector table').get(0); // however you access the table
var cell= table.rows[0].cells[0]; // or whatever rows/column you want
$(cell).doSomething(); // ...