Не подключается подключить jQuery к html

Имеется вот такой код:

<!DOCTYPE html>
<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script type="" src="script2.js"></script>
    
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="style2.css">
    <title></title>
</head>
<body>
    <h1>My page</h1>
    <h2>My page2</h2>
</body>
</html>

и такой код в файле script2.js:

$('h2').css({'color':'red'});
alert('hello');

Алерты работают, значит сам файл js я подключил правильно. А вот код jQuery -- нет. Похожий код я использовал в своем другом проекте, и там все нормально работало.


Ответы (5 шт):

Автор решения: shumik_UA

Вам весь jquery код нужно помещать внутрь $(document).ready(function(){ ... });

$(document).ready(function(){
    $('h2').css({'color':'red'});
    alert('hello');
});
<!DOCTYPE html>
<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script type="" src="script2.js"></script>
    
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="style2.css">
    <title></title>
</head>
<body>
    <h1>My page</h1>
    <h2>My page2</h2>
</body>
</html>

→ Ссылка
Автор решения: Eduard

Или поместить <script type="" src="script2.js"></script> в конец, перед </body>

→ Ссылка
Автор решения: CbIPoK2513

Попробуйте использовать следующую структуру для подключаемого файла script2.js

!function($){
  $(document).ready(function(){
    // ТУТ ВАШ КОД
  });
}(window.jQuery);
→ Ссылка
Автор решения: NoSkill

Порядок выполнения обычных (не module, не defer, не async) скриптов в HTML седующий:

  • Приостанавливается парсинг HTML.
  • Блокируется событие DOMContentLoaded.
  • Скрипт сразу подгружается, парсится и выполняется.
  • Гарантируется порядок выполнения относительно других обычных скриптов.

Учитывая вышесказанное, когда браузер встретил ваш скрипт, то пока он не выполнит его, он не отпарсит часть страницы под ним. В то время, когда он выполняется - ваших тегов H1 и H2 еще не существует. Скрипт работает нормально, но jQuery не делает ничего!

Вам нужно догрузить/дорендерить всю станицу, а уже потом, делать с ней что-либо. jQuery рекомендует это делать следующим образом:

$(function() {

  $('h2').css({'color':'red'});
  alert('hello');

});
→ Ссылка
Автор решения: Тимур

$

(document).ready(function(){
    $('h2').css({'color':'red'});
    alert('hello');
});
<!DOCTYPE html>
<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script type="" src="script2.js"></script>
    
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="style2.css">
    <title></title>
</head>
<body>
    <h1>My page</h1>
    <h2>My page2</h2>
</body>
</html>
→ Ссылка