Ответ 1
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);
У меня есть определенный код для сортировки таблиц. Поскольку код распространен на большинстве страниц, я хочу создать 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>');
но это, похоже, не работает.
Каков наилучший способ сделать это?
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);
Если вы хотите включить код 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");
});
});
Вы можете использовать приведенный ниже код для загрузки 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!");
});
});
})();
В случае если вы хотите добавить ссылку на любой файл js, скажем, из вашего проекта, вы также можете добавить его напрямую, используя reference тега, в Visual Studio IDE это обрабатывается автоматически, перетаскивая внешний файл из проводника решений в текущий файл (это работает также для файлов с расширением вверх,.js и .css)
/// <reference path="jquery-2.0.3.js" />
/* 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 :)');
}
Проблема в том, что вы используете </script>
в script, который заканчивается тегом 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>');
Вот решение, которое я принял как комбинацию некоторых предлагаемых решений на некоторых других форумах.
Таким образом вы можете ссылаться как на файлы css, так и на другие js файлы в одном файле js, тем самым делая изменения в следующий раз только в одном месте. Пожалуйста, дайте мне знать, если у вас есть какие-либо проблемы.
Я сделал следующее:
объявлен и исполнен следующий код в этом файле
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();
Я ссылался на вышеуказанный файл jQueryIncluder.js в другом файле js или xsl моего проекта .Net следующим образом:
<script type="text/javascript" src="~/includes/jQueryIncluder.js"></script>
Я надеюсь, что мои усилия будут оценены.
Спасибо
невозможно импортировать 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');
});
});
это определенно сработает для вас
Theres плагин для jquery, где вы можете просто включить файлы, которые вам нужны, в какой-нибудь другой js файл, вот ссылка для него http://tobiasz123.wordpress.com/2007/08/01/include-script-inclusion-jquery-plugin/.
Также эта строка document.write будет записывать теги script в html не в ваш js файл.
Поэтому я надеюсь, что это может помочь вам, немного с вашей проблемой
Если вы часто хотите обновить ссылку на файл jquery на новый файл версии, на вашем сайте на многих страницах, за один раз.
Создайте файл javascript (.js) и поместите нижеприведенный код и сопоставьте этот файл javascript со всеми страницами (вместо сопоставления файла jquery непосредственно на странице), поэтому, когда ссылка jquery file обновлена на этом 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('>');
Вы можете создать основную страницу без использования 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>
Динамическое добавление 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>
Если document.write('<\script...') не работает, попробуйте document.createElement('script')...
Кроме того, вы должны быть обеспокоены типом веб-сайта, который вы создаете, - вы действительно думаете, что его хорошая идея включать файлы .js из .js файлов?
просто скопируйте код из двух файлов в ваш файл вверху.
или используйте что-то вроде http://code.google.com/p/minify/, чтобы динамически комбинировать ваши файлы.
Джош
Я считаю, что лучший способ - использовать это...
**<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>**
Это из проекта Codecademy "Сделать интерактивный сайт".
После долгих исследований я решаю эту проблему с подсказкой ответа ofir_aghai о событии загрузки скрипта.
В основном нам нужно использовать $ для кода JQuery, но мы не можем использовать его, пока не будет загружен JQuery. Я использовал document.createElement для добавления скрипта для JQuery, но проблема в том, что загрузка занимает некоторое время, пока следующий оператор в javascript, использующий $ fails. Поэтому я использовал приведенное ниже решение.
В myscript.js есть код, использующий JQuery main.js, который используется для загрузки как файла jquery 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 не сработало. Это немедленно перейдет к следующему утверждению, которое использует $.
Почему вы используете Javascript для записи тегов script? Просто добавьте теги script в свой раздел. Поэтому ваш документ будет выглядеть примерно так:
<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>