js的一些小知识的积累

今天在写一个JavaScript的demo----选项卡时遇到了一些问题,现记录如下:
(1)首先我发现在想定位到页面中的类是、时,我自然而然地想到了document.getElementsClassName(‘box‘);
但是我发现编辑器的高亮并没有显示,不像是document.getElementById的高亮,然后百度了一下,发现这种用法并没有提供支持,因为IE不支持

(2)在写一个for循环的时候,并没有像我设想的那样:
    for(var i=0;i<li.length;i++){
     
           li[i].onmouseover = function(){
                 for(var j=0;j<li.length;j++){
                     li[j].className = ‘link‘;
                     box[j].style.display = ‘none‘;
                 }
               
                 box[i].style.display = ‘block‘;    
                this.className = ‘active‘;

};

}

如上,我希望想c++或者其他的语言那样,通过定义定义两层for循环来定义新的box,结果编译并没有通过

为了探求原因,我把外层for循环写成如下:

for(var i=0;i<li.length;i++){
            alert(i);
      }

这样确实是从0,1,2,3这样的顺序打印的,说明for循环确实是这样执行的,但是以如下的方式进行执行的话:
        for(var i=0;i<li.length;i++){
           li[i].index = i;   //需要对li定义一个index属性,否则无法将每一个index付给后面的box
           li[i].onmouseover = function(){
                 for(var j=0;j<li.length;j++){
                     li[j].className = ‘link‘;
                     box[j].style.display = ‘none‘;
                 }
                 alert(i);  
             
           };
      }

像这样进行打印之后,发现打印出来的i都是li.length。之后才发现这个alert(i)是放在onmouseover事件里面的,并不是直接执行的
      所以在执行onmouseover时,外层循环已经执行完了,当然每次打印出来的i值就是最终的i值

所以为了避免这样的错误,应该改成如下这样:
        for(var i=0;i<li.length;i++){
           li[i].index = i;   //需要对li定义一个index属性,否则无法将每一个index付给后面的box
           li[i].onmouseover = function(){
                 for(var j=0;j<li.length;j++){
                     li[j].className = ‘link‘;
                     box[j].style.display = ‘none‘;
                 }
                box[this.index].style.display = ‘block‘;
                this.className = ‘active‘;

};

}

看来好多细节还是要注意啊

时间: 2024-10-07 10:22:10

js的一些小知识的积累的相关文章

js 选择框小知识

js 全选和单选问题: 一 复选框: 全选框: id="check" 单选框: class="check" $().click((){         ($().attr()){             $().attr()         }{             $().removeAttr()         }     }) checked:不选中 二  显示和不显示密码的效果 1 $("#showPassword").attr(&q

linux中脚本的一些小知识的积累

对于变量的问题: 对变量赋值,a="hello world",现在打印变量a的内容:echo $a. 对于${}的使用:如$aall,我们想要$a,这是,就可以${a}all了. 对于$()与${}的区别:$()是执行里面的代码得到的结果:${}是参数,{}是为了避免后面的影响到了,比如参数${a}a这样连着使用.如果不用{},系统就会识别成$aa了. $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个

JS,JQuery小知识

http://blog.163.com/[email protected]/blog/static/28896414201112252456459/?suggestedreading&wumii

C# 小知识的积累

类型转换; 显示转换,隐式转换 显示转换:注意数据是否益处 checked(expression) unchecked(expression);//可以改变益出检查的默认设置 枚举转换 Ex: static void Main(string[] args) { string str = "noth"; test t = (test)Enum.Parse(typeof(test), str); } enum test { noth, noth1 }

js的一些小知识

1.日期字符戳转时间 renderer : function(value, arg2) {                if (value != null && value != '') {                    var date = new Date();                    date.setTime(value);                    return '' + Ext.util.Format.date(date, 'Y-m-d H:i

[小知识] 获取浏览器UA标识

这个随笔纯粹是小知识的积累,以后都会打上小知识的标签. 经常见的,下载移动app时,只有一个二维码,但扫码后,会根据手机是iphone还是android下载不同app,下面就是这个操作的代码: < !DOCTYPE html > <html > <head > </head> <body> <script> var ua = navigator.userAgent.toLowerCase(); if (/iphone | ipad |

积累的一些代码片段/小知识

★jQuery1.7.2下操作object元素报错 jQuery1.7.2下,用$选择器操作object元素会报错:代码如下: $('object').hide(); 换用原生js就没事了: document.getElementsByTagName('object')[0].style.display = 'none'; ★关闭按钮小叉的字体 做一个简单的关闭按钮时,我们经常用字母X来实现,为了让它看上去更像一个叉,可设置字体为: font-family: “Microsoft JhengHe

js中级小知识1

首先我们复习之前的小知识,本期博客与之前有关 js数据类型 基本数据类型:string    undefined         null         boolean          number 引用数据类型:     Object     array       function 二者的区别 基本数据类型就是简单的操作值,引用数据类型,把引用地址赋值给变量 堆内存 就是存放代码块的,存放形式有两种,一种是对象一键值对的形式存放 另一种就是函数 以字符串的形式存放 案例 引用数据类型的赋

学习javascript总结下来的性能优化的小知识(二)

上面一篇文章大致介绍了一些javascript当中使用的一些小技巧,当下这篇文章继续介绍一下内存管理.松散耦合.性能方面的一些小知识.为避免错误应该注意的点 内存管理 1.循环引用 如果循环引用中包含DOM对象或者ActiveX对象,那么就会发生内存泄露.内存泄露的后果是在浏览器关闭前,即使是刷新页面,这部分内存不会被浏览器释放. 简单的循环引用: var el = document.getElementById('MyElement'); var func = function () { //