作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有几个函数必须获取 dom $$('.box')[0] ,我不想让 box 成为 glabal var,也不想让 js 寻找每次 dom 。当用户不运行这些函数时,我不想运行 $$('.box')[0] 。如何存储盒子变量?
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/mootools/1.4.5/mootools-yui-compressed.js"></script>
<script type="text/javascript">
/* -------
there are several function will have to get the dom $$('.box')[0] ,
I don't want to let box to be a glabal var, and I don't want to let js seek the
dom every time . and I don't want to run $$('.box')[0] when user not run these functions.
how to store the box var?
------- */
function a(){
var box = $$('.box')[0];
//...
}
function b(){
var box = $$('.box')[0];
//...
}
//...
</script>
<div class="box"></div>
最佳答案
我不知道这是否有帮助,但你可以将它的获取分离到一个函数中,并且只允许它执行一次。我忘记了这个函数是从哪里得到的,但它对于只允许函数运行一次很有用(并且每次调用它时,只需返回值):
function once(func) {
// Function wrapper to only allow a function, *func*, to be called once.
var ran = false, ret = undefined;
return function () {
if (ran) {
return ret;
}
ran = true;
ret = func.apply(this, arguments);
return ret;
};
}
所以我会这样使用它:
var getBox = once(function () {
return $$('.box')[0];
});
当您想要获取元素时,请始终使用 getBox()
。只有第一次调用它时才会搜索 DOM。此后每次,它都会返回盒子。
虽然这可能“有帮助”,但它与创建全局变量一样好,所以我不太确定您期望的解决方案是什么。
关于javascript - 如何在js中存储多个函数的dom var?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13579490/
我是一名优秀的程序员,十分优秀!