Как все селектор ("*") работает в jQuery? - PullRequest
2 голосов
/ 25 марта 2020

Я просматривал документацию jQuery, и меня действительно смутил пример выбора всех ("*"). Почему тег 'h3' в этом примере получает красную рамку? Вот официальная документация.

var elementCount = $( "*" ).css( "border", "3px solid red" ).length;
$( "body" ).prepend( "<h3>" + elementCount + " elements found</h3>" );
h3 {
  margin: 0;
}

div, span, p {
  width: 80px;
  height: 40px;
  float: left;
  padding: 10px;
  margin: 10px;
  background-color: #EEEEEE;
}
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>all demo</title>
    <script src="https://code.jquery.com/jquery-3.4.1.js"></script>
  </head>
  <body>
    <div>DIV</div>
    <span>SPAN</span>
    <p>P <button>Button</button></p>
  </body>
</html>

Поскольку оператор prepend выполняется после первого, я ожидал, что тег h3 не будет иметь красной границы.

Я проверил элемент h3 с помощью инструментов браузера, и он не показывает мне красной границы в своем стиле.

1 Ответ

4 голосов
/ 25 марта 2020

* выбирает все элементы в DOM. Это включает <body>, и это то, что граница, которую вы видите, на самом деле вокруг. Будет более очевидно, если вы удалите плавающий элемент, все остальное в приведенном ниже фрагменте будет таким же:

var elementCount = $("*").css("border", "3px solid red").length;
$("body").prepend("<h3>" + elementCount + " elements found</h3>");
h3 {
  margin: 0;
}

div,
span,
p {
  width: 80px;
  height: 40px;
  padding: 10px;
  margin: 10px;
  background-color: #EEEEEE;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>DIV</div>
<span>SPAN</span>
<p>P <button>Button</button></p>

Поплавковые элементы не приводят к тому, что их контейнеры расширяются, чтобы соответствовать. Когда вы добавляете h3, так как это единственный элемент без плавающего внутри тела, граница тела выглядит так же, как и граница h3.

Аналогично, если вы этого не сделаете добавив h3, вы увидите странную толстую красную рамку сверху, которая, кажется, ничего не окружает, потому что в теле нет элементов, занимающих место:

$("*").css("border", "3px solid red");
h3 {
  margin: 0;
}

div,
span,
p {
  float: left;
  width: 80px;
  height: 40px;
  padding: 10px;
  margin: 10px;
  background-color: #EEEEEE;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>DIV</div>
<span>SPAN</span>
<p>P <button>Button</button></p>

На самом деле h3 не имеет границы - он просто выглядит таким образом, потому что тело занимает то же самое область.

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