Почему селектор CSS «таблица tr: not (tr: nth-child (even))» выбрасывает ошибку TypeError? - PullRequest
0 голосов
/ 22 января 2019

Почему этот селектор работает:

document.querySelectorAll('table tr:not(:nth-child(even))');

Пока этот селектор не работает (выдает ошибку типа):

document.querySelectorAll('table tr:not(tr:nth-child(even))');

var query = (selector) => {
  return document.querySelectorAll(selector);
};
  
try {
  var select_a = 'table tr:not(:nth-child(even))';
  var select_b = 'table tr:not(tr:nth-child(even))';

  query(select_a).forEach((node) => {
    node.style.color = 'red';
  });

  query(select_b).forEach((node) => {
    node.style.color = 'blue';
  });
} catch (e) {
    query('div:nth-child(3)')[0].textContent = e.toString();
}
var query = (selector) => {
  return document.querySelectorAll(selector);
};
  
try {
  var select_a = 'table tr:not(:nth-child(even))';
  var select_b = 'table tr:not(tr:nth-child(even))';

  query(select_a).forEach((node) => {
    node.style.color = 'red';
  });

  query(select_b).forEach((node) => {
    node.style.color = 'blue';
  });
} catch (e) {
    query('div:nth-child(3)')[0].textContent = e.toString();
}
<table>
  <tr>
    <td>row 1 first-name</td>
    <td>row 1 last-name</td>
    <td>row-1 email</td>
  </tr>
  <tr>
    <td>row 2 first-name</td>
    <td>row 2 last-name</td>
    <td>row-2 email</td>
  </tr>
  <tr>
    <td>row 3 first-name</td>
    <td>row 3 last-name</td>
    <td>row-3 email</td>
  </tr>
  <tr>
    <td>row 4 first-name</td>
    <td>row 4 last-name</td>
    <td>row-4 email</td>
  </tr>
  <tr>
    <td>row 5 first-name</td>
    <td>row 5 last-name</td>
    <td>row-5 email</td>
  </tr>
</table>

<div>Why does select_a work but not select_b?</div>

<div></div>

1 Ответ

0 голосов
/ 22 января 2019

Пока этот селектор не (выдает ошибку типа):

document.querySelectorAll('table tr:not(tr:nth-child(even))');

:not() принимает только «простой селектор», а tr:nth-child(even) не один.

https://drafts.csswg.org/selectors-3/#simple-selectors-dfn:

Простой селектор - это селектор типа, универсальный селектор, селектор атрибута, селектор класса, селектор идентификатора или псевдокласс.

Либо является важным ключевым словом здесь.Разрешен только один из этих типов селекторов, но не их комбинации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...