Как добавить jQuery в файл JS

133

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

Проблема заключается в следующем: как добавить jQuery и плагин сортировщика таблиц в этот файл .js?

Я попробовал что-то вроде этого:

document.writeln('<script src="/javascripts/jquery.js" type="text/javascript"></script>');
document.writeln('<script type="text/javascript" src="/javascripts/jquery.tablesorter.js"></script>');

но это, похоже, не работает.

Каков наилучший способ сделать это?

Коди Грей
источник
Я просто повторю то, что несколько других сказали в своих ответах. Это не очень хорошая идея. Если вы хотите контролировать, какие файлы включены в одно место, используйте общий файл на вашем сервере для записи тегов сценариев (например, scripts.php будет генерировать теги сценариев для общих файлов js).
Prestaul
2
объединить TableSorter и ваш код. и использовать логику на стороне сервера, чтобы включить, когда вам это нужно.
gblazex

Ответы:

171
var script = document.createElement('script');
script.src = 'https://code.jquery.com/jquery-3.4.1.min.js';
script.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(script);
Даниэль Моура
источник
17
Я бы заменил http://на //для относительного протокола. Предполагая, что это работает со свойством src.
Azz
@DerFlatulator: мне также нужно отправить переменную в этот скрипт. как это сделать? как мне нужно отправить переменную itemtype = 11 или itemtype = 22 в этот включенный JS-файл, а затем использовать его в этом файле соответственно
sqlchild
Refused to load the script
Это не работает, я заменил строку script.scr на файл, который я скачал (тот же каталог, поэтому просто введите имя файла), и я также попробовал ссылку на хост jQuery от Microsoft, но это тоже не сработало.
codehelp4
83

Если вы хотите включить код jQuery из другого файла JS, это должно сработать:

У меня было следующее в моем HTML-файле:

<script src="jquery-1.6.1.js"></script>
<script src="my_jquery.js"></script>

Я создал отдельный файл my_jquery.js со следующим:

$(document).ready(function() {
  $('a').click(function(event) {
    event.preventDefault();
    $(this).hide("slow");
  });
});
Р-The_Master
источник
44
Так что, это все еще хороший ответ, и он может помочь кому-то еще искать, как это сделать. Добро пожаловать в stackoverflow, R-The_Master!
Тимоти Грут
9
@genesis φ В настоящее время это лучший результат Google для jquery include jsи имеет 13 000 просмотров LOL.
Lri
2
Чертовски! конечно выручил меня: P. Потрясающие!
Зебоидлунд
8
Выручил меня ... 3 года спустя :)
tushar747
5
Я просто хочу отметить: порядок, в который вы включаете ваши файлы js, важен.
КевинО
16

Вы можете использовать приведенный ниже код для загрузки jQuery в ваш файл JS. Я также добавил работающий jQuery JSFiddle, использующий функцию самовозбуждения.

// Anonymous "self-invoking" function
(function() {
    var startingTime = new Date().getTime();
    // Load the script
    var script = document.createElement("SCRIPT");
    script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js';
    script.type = 'text/javascript';
    document.getElementsByTagName("head")[0].appendChild(script);

    // Poll for jQuery to come into existance
    var checkReady = function(callback) {
        if (window.jQuery) {
            callback(jQuery);
        }
        else {
            window.setTimeout(function() { checkReady(callback); }, 20);
        }
    };

    // Start polling...
    checkReady(function($) {
        $(function() {
            var endingTime = new Date().getTime();
            var tookTime = endingTime - startingTime;
            window.alert("jQuery is loaded, after " + tookTime + " milliseconds!");
        });
    });
})();

Другой вариант : - Вы также можете попробовать Require.JS, который является загрузчиком модулей JS.

Хееманшу Бхалла
источник
Спасибо @StevenSpyrka за ценную оценку.
Химаншу Бхалла
7
/* Adding the script tag to the head as suggested before */

    var head = document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = "http://code.jquery.com/jquery-2.2.1.min.js";

    // Then bind the event to the callback function.
    // There are several events for cross browser compatibility.
    script.onreadystatechange = handler;
    script.onload = handler;

    // Fire the loading
    head.appendChild(script);

    function handler(){
       console.log('jquery added :)');
    }
ofir_aghai
источник
6

Если вы хотите добавить ссылку на любой файл js, скажем, из своего проекта, вы также можете добавить его напрямую, используя тег ссылки , в Visual Studio IDE это выполняется автоматически путем перетаскивания внешнего файла из обозревателя решений в текущий файл ( Это работает для файлов разметки, файлов .js и .css)

/// <reference path="jquery-2.0.3.js" />
пылать
источник
5

Проблема в том, что вы используете </script>скрипт, который завершает тег скрипта. Попробуй это:

document.writeln('<script src="/javascripts/jquery.js" type="text/javascript"></sc'+'ript>');
document.writeln('<script type="text/javascript" src="/javascripts/jquery.tablesorter.js"></sc'+'ript>');
соленый
источник
2
это решение ничего не делает, так как scriptтег уже рассматривался как строка, а не как разметка.
RozzA
5

Вот решение, которое я принял в качестве комбинации некоторых предложенных решений на некоторых других форумах.

Таким образом, вы можете ссылаться как на css-файлы, так и на другие js-файлы в одном js-файле, таким образом внося изменения в следующий раз только в одном месте. Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы по этому поводу.

Я сделал следующее:

  1. Я создал JS с именем jQueryIncluder.js
  2. объявил и выполнил следующий код в этом файле

    function getVirtualDirectory() {
      var vDir = document.location.pathname.split('/');
      return '/' + vDir[1] + '/';
    }
    
    function include_jQueryFilesToPage() {
      var siteAddress = location.protocol + '//' + document.location.hostname + getVirtualDirectory(); 
      var jqCSSFilePath =  siteAddress + 'includes/jQueryCSS/ehrgreen-theme/jquery-ui-1.8.2.custom.css';
      var jqCoreFilePath = siteAddress + 'includes/jquery-1.4.1.min.js';
      var jqUIFilePath =   siteAddress + 'includes/jquery-ui-1.8.2.custom.min.js';
      var head  = document.getElementsByTagName('head')[0]; 
    
      // jQuery CSS jnclude
      var jqCSS = 'cssIDJQ';  // you could encode the css path itself to generate id.
      if (!document.getElementById(jqCSS)) { 
        var link  = document.createElement('link'); 
        link.id  = jqCSS; 
        link.rel  = 'stylesheet'; 
        link.type = 'text/css'; 
        link.href = jqCSSFilePath; 
        link.media = 'all'; 
        head.appendChild(link); 
      } 
    
      // Core jQuery include
      var jqc = "coreFileRefIDJQ";  
      if (!document.getElementById(jqc)) 
        document.write('<scr' + 'ipt type="text/javascript" id="' + jqc + '" src="' + jqCoreFilePath + '"></scr' + 'ipt>');
    
      // jQueryUI include
      var jqUI = "uiFileRefIDJQ";  
      if (!document.getElementById(jqUI)) 
        document.write('<scr' + 'ipt type="text/javascript" id="' + jqUI + '" src="' + jqUIFilePath + '"></scr' + 'ipt>');
    }
    
    include_jQueryFilesToPage();
  3. Я ссылался на вышеуказанный файл jQueryIncluder.js в другом файле js или xsl моего проекта .Net следующим образом:

    <script type="text/javascript" src="~/includes/jQueryIncluder.js"></script>

Я надеюсь, что мои усилия оценены.

Спасибо

Фейсал Mq
источник
5

невозможно импортировать файл js в другой файл js

Способ использовать JQuery внутри JS

импортируйте js в html или любую другую страницу просмотра, внутри которой вы собираетесь включить js файл

view.html

 <script src="<%=request.getContextPath()%>/js/jquery-1.11.3.js"></script>
 <script src="<%=request.getContextPath()%>/js/default.js"></script>

default.js

$('document').ready(function() {
    $('li#user').click(function() {
         $(this).addClass('selectedEmp');
    });
});

это определенно будет работать для вас

Амар Магар
источник
4

Есть плагин для jquery, где вы можете просто включить нужные файлы в какой-то другой файл js, вот ссылка на него http://tobiasz123.wordpress.com/2007/08/01/include-script-inclusion-jquery- плагин / .

Также эта строка document.write запишет теги сценария в html, а не в ваш файл js.

Поэтому я надеюсь, что это может помочь вам, немного с вашей проблемой

Сезар Эрмосильо
источник
1
Эта ссылка больше не доступна
sebisnow
1

Если вы часто хотите обновить ссылку на файл jquery на файл новой версии, по всему сайту на многих страницах, сразу.

Создайте файл javascript (.js) и вставьте приведенный ниже код, и сопоставьте этот файл javascript со всеми страницами (вместо сопоставления файла jquery непосредственно на странице), поэтому, когда ссылка на файл jquery обновляется в этом файле javascript, он будет отражать по всему сайту.

Приведенный ниже код протестирован, и он работает хорошо!

document.write('<');
document.write('script ');
document.write('src="');
//next line is the path to jquery file
document.write('/javascripts/jquery-1.4.1.js');
document.write('" type="text/javascript"></');
document.write('script');
document.write('>');
Сэм
источник
1

Вы можете создать базу главных страниц без включенных файлов js и jquery. Поместите заполнитель содержимого в базу главных страниц в разделе заголовка, затем создайте вложенную главную страницу, которая наследуется от этой базы основных страниц. Теперь поместите ваши включения в asp: content на вложенной главной странице, наконец, создайте страницу содержимого из этой вложенной главной страницы

Пример:

//in master page base    

<%@  master language="C#" autoeventwireup="true" inherits="MasterPage" codebehind="MasterPage.master.cs" %>
<html>
<head id="Head1" runat="server">
    <asp:ContentPlaceHolder runat="server" ID="cphChildHead">
        <!-- Nested Master Page include Codes will sit Here -->
    </asp:ContentPlaceHolder>
</head>
<body>
    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
    </asp:ContentPlaceHolder>
    <!-- some code here -->
</body>
</html>

//in nested master page :
<%@  master language="C#" masterpagefile="~/MasterPage.master" autoeventwireup="true"
    codebehind="MasterPageLib.master.cs" inherits="sampleNameSpace" %>
<asp:Content ID="headcontent" ContentPlaceHolderID="cphChildHead" runat="server">
    <!-- includes will set here a nested master page -->
    <link href="../CSS/pwt-datepicker.css" rel="stylesheet" type="text/css" />

    <script src="../js/jquery-1.9.0.min.js" type="text/javascript"></script>

    <!-- other includes ;) -->
</asp:Content>
<asp:Content ID="bodyContent" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <asp:ContentPlaceHolder ID="cphChildBody" runat="server" EnableViewState="true">
        <!-- Content page code will sit Here -->
    </asp:ContentPlaceHolder>
</asp:Content>
Реза Ахлаги
источник
1

Динамическое добавление jQuery, CSS из файла js. Когда мы добавили функцию onload в тело, мы можем использовать jQuery для создания страницы из файла js.

init();

function init()
{
	addJQuery();
	addBodyAndOnLoadScript();
	addCSS();
}

function addJQuery()
{
	var head = document.getElementsByTagName( 'head' )[0];
	var scriptjQuery = document.createElement( 'script' );
	scriptjQuery.type = 'text/javascript';
	scriptjQuery.id = 'jQuery'
	scriptjQuery.src = 'https://code.jquery.com/jquery-3.4.1.min.js';
	var script = document.getElementsByTagName( 'script' )[0];
	head.insertBefore(scriptjQuery, script);
}

function addBodyAndOnLoadScript()
{
	var body = document.createElement('body')
	body.onload = 
	function()
	{
		onloadFunction();
	};
}

function addCSS()
{
	var head = document.getElementsByTagName( 'head' )[0];
	var linkCss = document.createElement( 'link' );
	linkCss.rel = 'stylesheet';
	linkCss.href = 'E:/Temporary_files/temp_css.css';
	head.appendChild( linkCss );
}

function onloadFunction()
{
	var body = $( 'body' );
	body.append('<strong>Hello world</strong>');
}
html 
{
	background-color: #f5f5dc;
}
<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>Temp Study HTML Page</title>
		<script type="text/javascript" src="E:\Temporary_files\temp_script.js"></script>
	</head>
	<body></body>
</html>

BlackBackroom
источник
0

Если document.write ('<\ script ...') не работает, попробуйте document.createElement ('script') ...

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

ryansstack
источник
0

просто скопируйте код из двух файлов в ваш файл вверху.

или используйте что-то вроде этого http://code.google.com/p/minify/ для динамического объединения файлов.

мистифицировать

мистифицировать
источник
0

Я считаю, что лучше всего использовать это ...

**<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>**

Это из проекта Codecademy «Создать интерактивный сайт».

Cassar234
источник
0

После долгих исследований я решаю эту проблему с подсказкой ofir_aghai ответа о событии загрузки скрипта.

В основном нам нужно использовать $код jQuery, но мы не можем его использовать, пока не загрузится jQuery. Раньше я document.createElement()добавлял скрипт для jQuery, но проблема в том, что для загрузки требуется время, пока следующий оператор в JavaScript использует$ не работает. Итак, я использовал приведенное ниже решение.

myscript.js имеет код, который использует jQuery main.js используется для загрузки файлов jquery.min.js и myscript.js, чтобы убедиться, что jQuery загружен.

код main.js

window.load = loadJQueryFile();
var heads = document.getElementsByTagName('head');

function loadJQueryFile(){
    var jqueryScript=document.createElement('script');
    jqueryScript.setAttribute("type","text/javascript");
    jqueryScript.setAttribute("src", "/js/jquery.min.js");

    jqueryScript.onreadystatechange = handler;
    jqueryScript.onload = handler;  
    heads[0].appendChild(jqueryScript);
}

function handler(){
    var myScriptFile=document.createElement('script');
    myScriptFile.setAttribute("type","text/javascript");
    myScriptFile.setAttribute("src", "myscript.js");
    heads[0].appendChild(myScriptFile);
 }

Таким образом, это сработало. Использование loadJQueryFile()из myscript.js не работает. Он сразу переходит к следующему утверждению, которое использует $.

ashah
источник
0

Я полагаю, что вы хотите, чтобы по-прежнему включить этот файл JS в ваш HTML-дом, если это так, то это apporach будет работать.

  1. Напишите свой код JQuery в вашем файле JavaScript, как вы бы в HTML-дом
  2. Включить jquery framework перед закрытием тега body
  3. Включить файл javascript после включения файла jqyery

Пример: // файл js

     $(document).ready(function(){
     alert("jquery in js file");
     });

// html dom

    <body>
   <!--some divs content--->

   <script src=/path/to/jquery.js ></script>
   <script src=/path/to/js.js ></script>
   </body>
GeniusGeek
источник
-2

Почему вы используете Javascript для написания тегов скрипта? Просто добавьте теги скрипта в ваш головной раздел. Итак, ваш документ будет выглядеть примерно так:

<html>
  <head>
    <!-- Whatever you want here -->
    <script src="/javascripts/jquery.js" type="text/javascript"></script>
    <script src="/javascripts/jquery.tablesorter.js" type="text/javascript"></script>
  </head>
  <body>
    The contents of the page.
  </body>
</html>
Синан Тайфур
источник
2
Я говорю о файлах JS. Как добавить ссылку JQuery в файл JS
Джеш, ты не можешь этого сделать. На файлы скриптов нельзя ссылаться в других файлах скриптов.
Canavar
5
Да, они могут, Канавар. Что касается браузера, то не имеет значения, добавляете ли вы теги скрипта в HTML или в сам скрипт, потому что он интерпретирует результат одинаково.
Соленое
-2
var jQueryScript = document.createElement('script');  
jQueryScript.setAttribute('src','https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js');
document.head.appendChild(jQueryScript);
Ашитош Салви
источник
Пожалуйста, не публикуйте только код в качестве ответа, а также предоставьте объяснение того, что делает ваш код и как он решает проблему вопроса. Ответы с объяснением, как правило, более полезны и более качественны, и, скорее всего, привлекут положительные отзывы.
Марк Роттвил