Вы можете использовать descendant или child селекторы (технически «комбинаторов»), чтобы объединить первую часть:
document.querySelectorAll('.datagrid .even')[3].querySelectorAll('tbody tr')
... но это сделает работу браузера немного сложнее, чем ваш код делает потому что первая часть вашего кода (document.querySelector('.datagrid')
) перестанет смотреть, когда находит первый элемент, а затем ищет .even
элементы только внутри этого. Вышесказанное ищет все.even
элементы, которые имеют .datagrid
предков. Таким образом, возможно, потребуется найти больше документа. Большую часть времени это не имеет значения, но стоит отметить. Вышеизложенное также предполагает, что в первом .datagrid
имеется как минимум четыре элемента .even
. Если нет, то ваш код будет сгенерировано сообщение об ошибке (из-за попытки позвонить .querySelectorAll
на [3]
, который был бы null
), в то время как приведенный выше код может выдаст ошибку (если не четыре в общей на странице), или может ссылаться на элемент .even
в последующем .datagrid
, а не на первый.
[3]
делает сложным комбинировать это с тем, что следует. Заманчиво использовать .even:nth-child(3)
или .even:nth-of-type(3)
, но это было бы ошибкой, потому что ни один из этих совпадений не подходит для .even
, а затем берет третий. nth-child
соответствует только элементам, которые являются и.even
и третий дочерний элемент их родителя (учитывая все элементы, а не только .even
). nth-of-type
делает то же самое, но только с учетом других элементов, имеющих один и тот же тег. Если у вас есть другие элементы не .even
с тем же именем тега, это будет неправильно.
Иногда вы слышите разговоры о добавлении селектора (аналогично :eq
, предоставленному jQuery), чтобы делать то, о чем вы говорите, но проблема (как я понимаю) заключается в том, что это потребует фундаментального изменения того, как механизмы выбора селектора процессов (справа налево). (Там же проблема, что JQuery невероятно широко используется, и использует 0
как индекс первого элемента, в то время как CSS использует 1
в подобных ситуациях. Таким образом, CSS придется использовать что-то другое, чем :eq
— возможно :index
? —, чтобы избежать путаницы.)
[Селекторы CSS в селене] (http://sauceio.com/index.php/2010/01/selenium-totw-css-selectors-in-selenium-demystified/) Полезно? – screenmutt