JS 怎样获取 script标签中的内容?
发布于 12 年前 作者 jiyinyiyong 49508 次浏览 最后一次编辑是 8 年前

jQuery 应该是一样的吧… 比如我吧一个模板文件用 <script type='text/jade' id='tmpl' src='tmpl.jade'> 包含起来, 弱弱得问一声… 这个 type 会不会不科学的…? 然后怎样从内部取出具体的内容呢?

18 回复
$('script[type="text/jade"]').each(function () {
  var script = $(this).html();
  // script就是js代码了
});

这样还是不安全的说.

$('script[type="text/jade"]').each(function(){console.log(this.text)});

@leizongmin @rekey 试了下不行, 我是在 Chrome 里面的, 然后, 如果我吧内容写在标签里面, 而不是用 ssrc="", 两段代码就都获取到了. 难道 src 属性的内容只能浏览器自身才能读取么?

笨一点的方法:你获取到script标签的src属性,然后自己发出个ajax请求去获取内容

是不是没放在document的ready以后执行?

@cony138 我是先加载好, 然后在 console 里输入代码的, 不会是这问题

@leizongmin 好像也是… 这办法犀利. 我看到过 Backbone 里用这样的语法引入模板的, 搞不好也这样

浏览器应该是执行src所引入的脚本文件~ 如果想获取那个src的文件,个人觉得老雷的说法还可以尝试去做!

内联的可以$(id).html(),对于外部资源,浏览器是首先加载到script然后解释执行的,你这里用src一般做法就是一个xhr请求取回来内容

@leizongmin 如果是跨域js文件,岂不是还非常麻烦?

@jiyinyiyong 我同事遇到类似问题,把模板文件写成xxx.jade.js的样子,然后用seajs载入。 并且自己做了个小程序,把模板中的空格回车删除,并在开头加入define…笨是笨了点,但问题解决了。不怕跨域。

@cony138 我现在把模板写在单独的 .js 当脚本传的. seajs 太复杂了, 我写的也就入门级的练习, 不用也不打紧

@jiyinyiyong 前段mvc模板一般都是直接写在html页面,或者写成html文件,后端格式化处理成一个模板js文件,也就是一个模板对象,这样又快又减少http请求.

同样遇到这个问题,前后端同时使用jade 是不能把模板放到内嵌script里的,然后很别扭,我的方法是把jade文件转化成字符串,然后付给一个变量,前端代码中直接引用这个变量 不过这个又失去了jade易读易写的结构,也没找到什么好方法

如果jade能够生成内嵌的script 不去除空格而且复合jade格式的话,这个问题也算解决了

不对 我的问题解决了 可以用内嵌 注意里面的变量#{XX} 前要加\ 看来是我想过来

我就在一直找能这样读取script的src指向的资源的内容的方法,而且,感觉 @leizongmin 的方法不能完全满足要求,因为如果是用src属性获取资源的话,浏览器是有缓存的,如果是使用ajax获取json,虽然可以在网页运行时设置缓存,但是那缓存只是缓存到内存中去了,一旦关掉这个页面,再次读取时将会再次获取json,而使用src属性获取资源,就直接从硬盘缓存中获取资源了。

不过使用iframe是可以的,而且直接把jade的文本放在iframe的pre标签里,不过获取iframe的内部标签怎么获取,不要笑,我真不知道,前端的这些东西我都没有系统的学过。网上好像有些方法,不过自己稍微试了一下,好像有问题,不过这种问题应该很容易解决。也许获取iframe的内部标签对你们而言是小儿科,而且这种方法太难看了,(那么一大堆源代码直接作为字符串放在iframe里啊,)所以还是想找个更好的方法。

回到顶部