используя jQuery (поместите внизу страницы) на определенной странице - PullRequest
3 голосов
/ 13 октября 2009

В целях повышения производительности я загружаю скрипты jQuery внизу страницы (непосредственно перед закрывающим тегом body).

Мой вопрос: как включить скрипты для конкретной страницы? Я не хочу помещать все в метод $ (document) .ready (опять же из соображений производительности).

Обновление: я использую систему шаблонов, поэтому я помещаю загрузку jQuery в шаблон. Таким образом, вызовы jQuery не распознаются, даже если я помещаю их в конец определенной страницы, поскольку в этот момент jQuery не загружается.

Ответы [ 7 ]

4 голосов
/ 13 октября 2009

Я не на 100% уверен в том, что вы спрашиваете, но если это то, что я думаю, ответ таков: вы не можете съесть свой пирог и съесть его тоже.

Кажется, что вы переместили jQuery на кнопку страницы, но у вас есть некоторые элементы страницы, на которых вы хотите использовать JavaScript, но не хотите ждать document.ready для всех? Может быть, что-то вроде следующего?

<html>
<body>
   <ul id="maybe-some-menu-that-needs-js-initialization-for-example">
   ...
   </ul>
   <script>
     /* javascript goes here that uses jquery for the above menu (or whatever) 
     AND you don't want to wait for document.ready for this to happen */
   </script>
   ...
   <script src="including jquery here"></script>
   <script src="including other scripts here"></script>
</body>
</html>

Если это так, то обратитесь к тому, что я сказал с самого начала. Вам придется переместить jQuery (по крайней мере, библиотеку, не обязательно весь ваш другой JavaScript) обратно в начало страницы. Либо так, либо не используйте jQuery для вещей, которые вы не хотите ждать для document.ready, для которых.

Редактировать: Если вы хотите выполнять действия, основанные на вашей странице, то есть два метода, каждый лучше и предпочтительнее, чем последний.

  1. Используйте location.pathname, чтобы определить, какие функции вам нужны.
  2. Организуйте свой JavaScript в отдельные модульные файлы по их функциональности и включайте в себя только те, которые необходимы для конкретной страницы.
3 голосов
/ 13 октября 2009

с использованием $(document).ready, не имеет значения, где на странице он находится, поскольку он будет выполняться только после завершения загрузки DOM. Единственный код, который должен находиться внутри $(document).ready, - это код, который необходимо настроить при загрузке DOM, например, обработчики событий, любые эффекты / анимации, которые вы хотите запустить, как только DOM завершит загрузку, и т. д. Другие функции не обязательно должны быть в $(document).ready, такие как функции, используемые при сортировке массива, именованные функции, вызываемые при событиях подняты и т. д.

Как уже указывалось, вы можете иметь более одной функции $(document).ready на странице, поскольку вы указываете функцию (именованную или анонимную), которая будет выполняться, когда событие ready (событие jQuery) поднят.

EDIT:

Эта статья, на которую вы ссылались в комментариях к этому ответу , содержит пример того, чего вы пытаетесь достичь. Например, у вас будет файл JavaScript со следующей настройкой для объявления глобальной переменной

var myPageLibrary = {
    homePage : {

        init : function() {
            $(document).ready(function() {
                /* page specific functions that need to run,
                   for exmaple, binding event handlers, etc */
            });
        }
    },
    aboutPage : {
        init : function() {
            $(document).ready(function() {
                /* page specific functions that need to run,
                   for exmaple, binding event handlers, etc */
            });
        }
    }
}

/* you might have functions here that are bound to events. 
   Here is an example */

function showSubMenu(e) {
    $(e.target).next('div').show();
}

function hideSubMenu(e) {
    $(e.target).next('div').hide();
}

Тогда на ваших страницах у вас будет следующая структура (в этом примере используется домашняя страница)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>This is my Home Page</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script src="path-to-myPageLibrary.js"></script>
<script type="text/javascript">
    myPageLibrary.homePage.init(); 
</script>
</head>
<body>
  <!-- Page content -->
</body>
</html>

сначала указывается файл сценария jQuery, затем файл сценария myPageLibrary, а затем блок сценария, вызывающий myPageLibrary.homePage.init();

3 голосов
/ 13 октября 2009

$(document).ready() не будет переопределено при его использовании более одного раза, поэтому вы можете загрузить 2 файла сценария, которые оба добавляют функциональность для запуска при загрузке документа.

2 голосов
/ 15 сентября 2016

Если я правильно понимаю, вам нужно поместить некоторый код javascript, который вызывает jquery, в середине вашей страницы. Но ваш JQuery включает в себя в нижней части тела. Вы можете сделать это, вызвав jquery в событии window.load. Это событие возникает после загрузки и выполнения всех асинхронных сценариев. e.g.:

<body>
    <script>
        $("#myElem").val(); // fails, "$" not defined
        window.addEventListener("load", function(evt) {
            $("#myElem").val(); // ok, jquery is loaded
        });
    </script>
    <span id="myElem>hi</span>
    <script src="//cdn.jquery.com"></script>
</body>
1 голос
/ 20 декабря 2010

Это позволяет вам вызывать методы плагина jQuery в теле и загружать плагин jQuery вниз страницы headjs

0 голосов
/ 10 июня 2011

Вы пробовали "скрипт @section"? Он автоматически добавит коды в конец страницы, поэтому у вас могут быть скрипты jQuery для конкретной страницы.

@section scripts {
<script>
 jQuery(document).ready(function () {
//put your jQuery codes here
});
</script>
}
0 голосов
/ 13 октября 2009

Просто укажите страницу $(document).ready().

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