我的网页中有以下脚本元素:
<script src="default.js" type="text/javascript"></script>
使用JavaScript,我希望能够检索脚本文件的内容。我知道我可以使用ajax请求获取数据,但后来我从本地已有的服务器获取了一些东西。
所以我更喜欢从DOM中检索内容(如果可能的话)或具有相同结果的内容。
干杯 安东尼
更新
我试图简化这个问题,也许是一个糟糕的想法,我认为这样会减少问题。
我的实际情况如下,我实际上已经
<script type="text/html" class="jq-ItemTemplate_Approval">
...
html template that is going to be consumed by jQuery and jTemplate
...
</script>
现在这个工作正常,但这意味着每次页面加载时我必须将模板作为主页面的html的一部分发送。所以我的计划是做以下事情:
<script src="template.html" type="text/html"></script>
这意味着浏览器会缓存template.html的内容,我不必每次都发送它。但要做到这一点,我需要能够从文件中获取内容。
同样在这种情况下,据我所知,通过ajax请求内容不会对此有所帮助,因为它必须回到服务器才能获取内容。
答案 0 :(得分:5)
如果我理解正确,您不希望使用Ajax加载html模板文本,而是将其加载到页面的其余部分。如果您控制服务器端,您始终可以将模板文本包含在一个不可见的div标签中,然后从Javascript中引用该标签:
<div id="template" style="display:none;">
...template text...
</div>
<script>
// pops up the template text.
alert(document.getElementById("template").innerHTML);
</script>
如果您只是想加载模板以便缓存它,可以将内容放在这样的变量中:
<script>
var template = "template text..";
</script>
或者您可以使用ajax加载它并将模板存储在变量中,以便可以访问它。它在jquery中非常简单:
var template;
$.get("template.html", function(data){
template = data;
});
答案 1 :(得分:4)
除非您在页面中将脚本作为文字文本加载,否则它不会作为文本存在。它由浏览器解释并与任何其他脚本一起融入运行时。
如果你想要源,你必须再次获取它,如果使用Ajax获取responseText。
它将来自浏览器缓存,无需再次下载。
答案 2 :(得分:2)
我认为你想要做的是在template.js中分配一个变量。然后,您可以在jquery中的任何位置使用该变量。类似的东西:
var tpl = "<div> ... </div>"
这不是解决问题的简单方法吗?我们在Ext JS中这样做。我认为这对jQuery有用。
答案 3 :(得分:2)
您可以获取脚本的src属性,然后使用XHR获取JS文件的内容。这是IMO的一种更清洁的方式。 e.g: -
if(window.XMLHttpRequest) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if(xhr.status == 200 && xhr.readyState == 4) {
var sourceCode = xhr.responseText;
alert('The source code is:-\n'+sourceCode);
}
}
xhr.open("GET",document.getElementById('scriptID').src,true);
xhr.send(null);
}
答案 4 :(得分:1)
保存模板以便稍后渲染...
没有提及iFrame,但似乎工作得很好(尚未运行性能测试)
将iFrame放在您希望模板打开的页面上(index.html)
<html>
<head>
<iframe src="mustache.Users.html" onload="this.remove();" class="hidden" id="users_template"></iframe>
</head>
</html>
将此身体包装放在模板周围(mustache.Users.html)
(不要担心它不会出现在模板中)
<body onload="localStorage.setItem('users_template',this.document.body.innerHTML);">
<ul class="list-group" id="users" >
{{#users}}<li>{{name}}</li>{{/users}}
</ul>
</body>
现在您可以随时随地访问模板
localStorage.getItem('users_template')
OR
window.localStorage.getItem('users_template')
答案 5 :(得分:0)
JavaScript文件中包含哪些内容?如果它是实际代码,您可以在其中运行函数和引用变量,就像您已将它们剪切并粘贴到网页中一样。您需要将include行放在引用它的任何脚本块之上。
这是你想要完成的事情吗?
答案 6 :(得分:0)
为什么不使用Ajax(以及Ajah,因为它的html: - ))?
如果服务器设置正确并且没有发送no-cache或过去的expires标头,浏览器将对其进行缓存。
答案 7 :(得分:0)
大多数JavaScript导入文件的工作方式是它们包括一个脚本,该脚本立即调用带有某些文本或另一个函数的参数的函数。为了更好地说明,假设您有主index.html文件,请按以下步骤进行设置:
BLoC
现在制作另一个文件Dashboard
,并在加载后立即调用该函数,该函数应该已经在范围中声明了“开始”函数,完成后,无论从哪里传递文本该文件存储在主index.html文件中。您甚至可以将整个函数字符串化并放入其中,例如:
<html>
<head>
</head>
<body>
<script>
let modules = {};
function started(moduleName, srcTxt) {
modules[moduleName] = (srcTxt) //or something similar
}
</script>
<!--now you can include other script tags, and any script tags that will be included, their source can be gotten (if set up right, see later)-->
<script src="someOtherFile.js"></script>
</body>
</html>
现在您可以访问函数的内部内容,并获取注释之间的所有文本,或者更好的是,然后进行其他解析等,或在注释的开头和结尾进行某种其他类型的解析标识符,如上所示,并获得介于两者之间的所有文本