如何在JS文件中添加jQuery


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标签(例如scripts.php将为通用js文件生成脚本标签)。
Prestaul

2
合并tablesorter和您的代码。并在需要时使用服务器端逻辑进行添加。
gblazex

Answers:


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 2013年

Refused to load the script

这不起作用,我用下载的文件替换了script.scr字符串(相同的目录,所以只放置了文件名),并且我也尝试了Microsoft jQuery主机链接,但这也不起作用。
codehelp4 18/09/23

83

如果要包含另一个JS文件中的jQuery代码,则可以做到这一点:

我的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");
  });
});

44
所以,这仍然是一个很好的答案,它可能会帮助其他人寻找如何做。欢迎来到stackoverflow,R-The_Master!
Timothy Groote

9
@genesisφ这是当前Google排名最高的结果,jquery include js并具有13000次浏览量。
Lri 2011年

2
该死的直!当然帮了我大忙:P。太棒了!
zeboidlund 2011年

8
帮助了我... 3年后:)
tushar747

5
我只想指出:包含js文件的顺序很重要。
KevinO 2012年

16

您可以使用以下代码来实现在JS文件中加载jQuery。我还添加了一个正在运行的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的宝贵感谢。
Heemanshu Bhalla

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 :)');
    }

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 2013年

5

这是我在其他一些论坛中将一些建议的解决方案组合使用的解决方案。

这样,您可以在一个js文件中同时引用css文件和其他js文件,从而下次仅在单个位置进行更改。如果您有任何疑问,请告诉我。

我已经完成以下工作:

  1. 我创建了一个名称为jQueryIncluder.js的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. 我在.Net项目的另一个js或xsl文件中引用了上面的jQueryIncluder.js文件,如下所示:

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

希望我的努力得到赞赏。

谢谢


5

无法在另一个js文件中导入js文件

在js中使用jquery的方法是

将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');
    });
});

这绝对适合您



1

如果您经常想一次将jquery文件的链接更新为一个新版本的文件,则可以遍及整个站点的许多页面。

创建一个javascript文件(.js)并放入以下代码,然后将此javascript文件映射到所有页面(而不是直接在页面上映射jquery文件),因此,当在此javascript文件上更新jquery文件链接时,它将反映在整个网站上。

下面的代码已经过测试,效果很好!

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文件的母版页基础。将内容占位符放在头部的母版页基础中,然后创建一个从该母版页基础继承的嵌套母版页。现在,将您的include放在嵌套母版页的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

从js文件动态添加jQuery,CSS。当我们在主体上添加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>


0

如果document.write('<\ script ...')无法正常工作,请尝试document.createElement('script')...

除此之外,您还应该担心所创建的网站的类型-您真的认为从.js文件中包含.js文件是一个好主意吗?



0

我发现最好的方法是使用此...

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

这来自Codecademy的“制作交互式网站”项目。


0

经过大量研究,我通过ofir_aghai答案中有关脚本加载事件的提示来解决此问题。

基本上,我们需要使用$jQuery代码,但是直到加载jQuery才能使用它。我曾经document.createElement()为jQuery添加脚本,但是问题是加载时花时间,而JavaScript中的下一条语句使用$失败。因此,我使用了以下解决方案。

myscript.js具有使用jQuery的代码 main.js用于加载jquery.min.jsmyscript.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使用无法正常工作。它立即转到使用的下一条语句$


0

我相信您仍然想在html dom中包含此js文件,如果是这样,那么此方法将起作用。

  1. 就像在html dom中一样,将jQuery代码写入javascript文件中
  2. 在关闭body标签之前包含jquery框架
  3. 包含jqyery文件后包含javascript文件

示例:// 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>

-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
是的,他们可以,Canavar。就浏览器而言,在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);

请不要仅将代码发布为答案,还请提供解释代码的作用以及如何解决问题的方法。带有解释的答案通常会更有帮助,而且质量更好,并且更有可能引起反对。
Mark Rotteveel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.