这两天在帮其他项目组的同事做项目,他们使用layui,在使用模板时产生了一个疑问,先上代码

var getTpl = tpl_crumbs_list.innerHTML

tpl_crumbs_list没有在js里面定义,只在页面上写了一个<script id="tpl_crumbs_list" type="text/html">...</script>标签,layui是如何获取到变量tpl_crumbs_list的呢????
先到console输入tpl_crumbs_list,咔还真没报错,也不是undefined,好神奇啊,是不是layui遍历了所有的script,将所有非普通type的script都设为全局变量了,先搜script,好像没有,再搜id也没有,靠靠靠,什么情况,给layui.js加断点,一个函数一个函数运行,跑到最后tpl_crumbs_list,也是还是没值啊
猜想很有可能与layui没有关系,只要元素有id,就可以通过window[id内容]获取到此元素,在百度页面实验了一下

clipboard.png

果然如此

上百度,好不容易找到了Named access on the Window object

clipboard.png
上来就说这是非常规标准定义,使用此API会使代码脆弱不健壮,建议使用document.getElementById()或者document.querySelector()方法
自我感觉英语还行,但读起规范来总感觉力不从心

clipboard.png

主要有下面三种情况

  1. 子浏览内容(比如iframe)有name属性
  2. 在当前文档里下面元素有name属性, a, applet, area, embed, form, frameset, img, object,我自己实验了几个,发现a便签上有name属性获取不到此元素,formimg获取到了
  3. 在当前文档里任何元素有id属性,就可以

下面还有一段看起来费劲,这个方法也不是好方法就不看了,大致可以得到下面结论
iframe, applet, form, img, object等元素有name属性,可以通过window[name值]获取到该元素,任何当前文档元素有id,可以通过window[id值]获取该元素

贤心大神威武,又知道一个小窍门


VonWeb
21 声望3 粉丝