js最基础知识回顾2(函数传参,操作属性的第二种方式,提取行间事件,操作一组元素,this,焦点问题和鼠标按下抬起,选项卡)

一、函数传参

    1、函数传参:参数就是占位符----函数里定不下来的东西

a. var a1=function(){

alert(123);

};

function a(f){

// 相当于 f=a1

f();

};

a(a1);

b.  function skip(skipPath){  //换肤

var oLink1 = document.getElementById(‘link1‘);

oLink1.href=skipPath;

}

c.   function setStyle(name,value){  //设置行间样式

var oDiv1 = document.getElementById(‘div1‘);

oDiv1.style[name]=value;

  }

二、操作属性的第二种方式 

1、两种设置属性的方法

obj.value="abcd" ---------   obj[‘value‘]="abcd"

        [ ]可以代替所有的.    oDiv.style.background 和 oDiv[style][‘background‘]一样

.后面只能带原本就有的属性,不能带字符串。即使a是个参数,它也以为是个属性a。

[ ]具体属性名可随意改变,可存变量、参数、字符串。

属性可以变时用[ ];

function fn(a,b){

var oBox=document.getElementById(‘box‘);

oBox.style.a=b;   //这样不行

oBox.style[a]=b;  //正确写法

}

2、什么时候用:要改的属性不固定

字符串和变量——区别和联系

3样式优先级

行内>class>标签>*

元素.style.属性=……是修改行间样式,之后再修改className不会有效果,className与style不要混用,出问题不报错,难找

三、提取行间事件

    1、提取事件的几种方法

(1)function 名字(){     }

oBtn.onclick=名字

(2)oBtn.onclick=function(){     }

例一:

<input id="btn" type="button" onclick="fn()" />

var oBtn=document.getElementById(‘btn‘);

oBtn.value=4444;

function fn(){

alert(1);

}

oBtn.onclick=fn;     // 只需要放函数名, 不加括号,否则就是立即执行

例二:

var oBtn=document.getElementById(‘btn‘); //读到此行时,input还没加载,所以找不到元素

var oBox=document.getElementById(‘box‘);

oBtn.value=444;  //报错

oBtn.onclick=function(){

oBox.style.background=‘blue‘;

}

<input type="button" id="btn" />

<div id="box"></div>

    2、window.onload=function(){  }在页面加载后才开始执行

四、操作一组元素

1. document.getElementsByTagName可从document获取,也可从某个元素下获取,缩小选择范围;且不限层级。即使只有一个div,获取出来也是一组。

    数组:用来存放一组东西,但是不能直接操作数组,下标从0开始

2. document.getElementById只能从document下获取

3. children 子级,只是一级、一组下标,不管是什么标签只要是子级都获取。

4、不能直接给一组元素改变样式

aDiv.style.background=‘blue‘;  //不能这样写,不能直接给一组元素改变样式。应该用循环while遍历

改进:aDiv[0].style.background=‘blue‘;

、循环——反复去做一件事

  1、什么时候用循环:一组元素干同样的事情。

   2、一个循环的四个部分

(1)初始化、条件、语句、自增

   3、while(条件){语句}

[1]下标,代表第几个,从零开始,0代表第一个,最后一个永远比length少一个。

i=i+1;即 i++,i+=1;        i=i--;即i--; i-=1;

i=i+2;即i+=2;        i*=2;即i=i*2;        i/=2即i=i/2;

例子:var i=0;

while(i<5){

alert(i);

i++;

}

alert(‘条件已经走完‘);

  4、for循环----- for(初始值;条件;自增){}

(1) for(var i=0;i<aLi.length;i++){}

(2)  循环里的事件里面不能用i,因为循环结束之后才触发了事件。变量不进行人为更改,就永远都不会改。

(3)for循环适合做次数固定(能获取固定的length)的循环。

五、this

1. this---->当前用事件函数的对象,触发事件的元素本身

2. 如果不是事件函数----->window

for(var i=0;i<aLi.length;i++) {

aLi[i].onmouseover=function() {

   alert(this);   //鼠标移入的那个li

function fn1() {

alert(this);

//window 只会去找包着this的第一层函数

};

fn1();

};

};

顶部菜单:

window.onload=function(){

aLi=document.getElementsByTagName(‘li‘);

for(var i=0;i<aLi.length;i++){

aLi[i].onmouseover=function(){

 var oDiv=this.children[0];

if(oDiv){     //判断oDiv是否存在,存在则执行下面

oDiv.style.display=‘block‘;

var oA=oDiv.children[0];

if(oA){

oA.onclick=function(){

oDiv.style.display=‘none‘;

}

}

}

}

aLi[i].onmouseout=function(){

var oDiv=this.children[0];

if(oDiv){

oDiv.style.display=‘none‘;

}

}

}

}

、焦点问题和鼠标按下抬起

自动聚焦:<input type="text" autofocus />

1. onfocus 获得焦点

var aInput=document.getElementByTagName(‘input‘);

for(var i=0;i<aInput.length;i++){

aInput[i].onfocus=function(){

alert(this.value);

}

}

2. onblur 失去焦点

例一:搜索框

var oSpan=document.getElementById(‘span1‘);

var oTex=document.getElementById(‘text1‘);

var oUl=document.getElementById(‘ul1‘);

var aLi=oUl.children;       //oUl的直接子集

oTex.onfocus=function(){

oSpan.style.display=‘none‘;

oUl.style.display=‘block‘;

};

oTex.onblur=function(){

if(this.value!=‘‘){   //输入框的值不为空,让oSpan,oUl都隐藏

   oSpan.style.display=‘none‘;

oUl.style.display=‘none‘;

};

};

for(var i=0;i<aLi.length;i++){

aLi[i].onmousedown=function(){

    oTex.value=this.children[0].innerHTML;

};

};

<div>

<span id="span1">请输入文本</span>

<input type="text" id="text1" />

<ul id="ul1">

<li><a href="javascript:;">菜单1</a></li>

<li><a href="javascript:;">菜单2</a></li>

<li><a href="javascript:;">菜单3</a></li>

</ul>

</div>

3. onmousedown  鼠标按下的时候

    onmouseup 鼠标抬起

oTxt.onmousedown=function(){

alert(111);

}

4. innerHTML----获取或修改html内容(该元素必须是双标签的)如果内容有标签,则连标签一起返回

window.onload=function(){

var oBox=document.getElementById(‘box‘);

oBox.onclick=function(){

this.innerHTML=333333; //会覆盖原来的内容

this.innerHTML=‘‘;   //清空

this.innerHTML=‘<h1>标题</h1>‘;  //创建标签

}

}

八、全选反选不选

window.onload=function(){

var oBtn1=document.getElementById(‘btn1‘);

var oBtn2=document.getElementById(‘btn2‘);

var oBtn3=document.getElementById(‘btn3‘);

var aInput=document.getElementById(‘box‘).getElementsByTagName(‘input‘);

oBtn1.onclick=function(){

  for(var i=0;i<aInput.length;i++){

   aInput[i].checked=this.checked;

  };

oBtn2.checked=false;

oBtn3.checked=false;

if(!this.checked){    //如果全选按钮checked为false,则反选按钮选中

   oBtn2.checked=true;

  };

};

for(var i=0;i<aInput.length;i++){

  aInput[i].onclick=function(){

   var count=0;

   for(var j=0;j<aInput.length;j++){

    if(aInput[j].checked){

     count++;

    }

   }

   if(count==aInput.length){

    oBtn1.checked=true;

   }else{

    oBtn1.checked=false;

   }

}

}

oBtn2.onclick=function(){

  for(var i=0;i<aInput.length;i++){

   aInput[i].checked=false;

  };

oBtn1.checked=false;

oBtn3.checked=false;

};

oBtn3.onclick=function(){

  for(var i=0;i<aInput.length;i++){

   /*if(aInput[i].checked){

    aInput[i].checked=false;

   }else{

    aInput[i].checked=true;

   };*/

   aInput[i].checked=!aInput[i].checked;

  };

oBtn1.checked=false;

oBtn2.checked=false;

};

};

九、选项卡

 在循环的事件里,不要用i,改用this,index

1. <input a="0"> 在标题里直接写自定义属性,只有IE8及以下才能直接获取xxx.a

2. HTML加载顺序:

加载HTML——>高级浏览器过滤掉自定义属性——>JS

解决:自定义属性在第三步走js的时候再加上

多个选项卡 

window.onloadd=function(){

f(‘box‘,‘div‘,‘onclick‘);

f(‘box2‘,‘p‘,‘onmouseover‘);

f(‘box3‘,‘div‘,‘onclick‘);

//每调用一次函数,都是一个新的函数,相当于复制函数。

function f(id,tagname,mouse){

var oBox=document.getElementById(id);

var aBtn=oBox.getElementsByTagName(‘input‘);

var aDiv=oBox.getElementsByTagName(tagname);

for(var i=0;i<aBtn.length;i++){

aBtn[i].index=i;

aBtn[i][mouse]=function(){

for(var i=0;i<aDiv.length;i++){

aBtn[i].className=‘‘;

aDiv.className=‘‘;

}

this.className=‘active‘;

aDiv[this.index].className=‘show‘;

}

}

}

}

十. 焦点图

window.onload=function(){

var oBox=document.getElementById(‘box‘);

var oPic=oBox.children[0];

var oNum=oBox.children[1];

var aLi1=oPic.children;

var aLi2=oNum.children;

for(var i=0;i<aLi2.length;i++){

aLi2[i].index=i;

aLi2[i].onmouseover=function(){

for(var i=0;i<aLi2.length;i++){

aLi2[i].className=‘‘;

aLi1[i].className=‘‘;

}

this.className=‘active‘;

aLi1[this.index].className=‘active‘;

}

}

};

时间: 2024-10-21 10:59:38

js最基础知识回顾2(函数传参,操作属性的第二种方式,提取行间事件,操作一组元素,this,焦点问题和鼠标按下抬起,选项卡)的相关文章

js最基础知识回顾

一.html/css 1. 什么是盒子模型? padding+border+width/height 2. float 浮动 (1)浮动的特性 半脱离文档流 行内变成块  共处一行 能设置宽高 同级元素有浮动,必须全部都浮动 父级宽度不够,子集掉下来 文本环绕  顶对齐 (2)清除浮动? clear:both; clearfix: clear:after{display:block; content:''; clear:both;} clear{zoom:1;} overflow:hidden;

js最基础知识回顾6(数组,JSON,getByClass,select,Math对象)

一.数组的相关操作 1. 定义 (1)var arr=[1,'abc',function(){alert(3333);},[333,444]]; (2)var arr=new Array(12,5,8,9);   如果只放一个数字,要设定length (3)[]的性能略高,因为代码短 2. 属性----length(既可以获取,又可以设置)---例子:快速清空数组 var a=[1,2,3,4,5,6,]; a.length=0; alert(a); (1)如果设置的length多于数组的内容,

js最基础知识回顾6(变量,预解析,引用,索引)

一.变量 1. 作用域:全局.局部.闭包 2. var a=12;   不加var,会变成全局变量. 3. 全局变量:容易重名,影响性能 4. 局部变量和全局变量重名,局部会屏蔽全局. 5. 给window加东西,是全局的.用途:把封闭空间的东西,变成全局. (function(){ window.a=12; alert(a); })() 二.预解析 1. 系统会把所有变量的声明,放在最上面.只是声明到上面,赋值还在原来的位置. 2. 预解析的作用域:不会脱离原本的作用域.函数中,变量放在函数最

js最基础知识回顾3(字符串拼接,数据类型,变量类型,变量作用域和闭包,运算符,流程控制,)

一.javaScript组成     1.ECMAScript:解释器.翻译 ---------------------------------------------------------几乎没有兼容性问题     2.DOM:Document Object Model --------操作HTML的能力----document--------有一些兼容性问题     3.BOM:Browser Object Model -------------浏览器---------------wind

Java基础知识强化之IO流笔记30:字节流4种方式复制mp4并测试效率

1. 需求:把e:\\哥有老婆.mp4 复制到当前项目目录下的copy.mp4中 字节流四种方式复制文件: • 基本字节流一次读写一个字节 • 基本字节流一次读写一个字节数组 • 高效字节流一次读写一个字节 • 高效字节流一次读写一个字节数组 2. 代码示例: 1 package cn.itcast_06; 2 3 import java.io.BufferedInputStream; 4 import java.io.BufferedOutputStream; 5 import java.io

【JS学习笔记】函数传参

比如仅仅改变背景的颜色 函数传参:参数就是占位符. 那么在什么时候用传参呢?函数里定不下来的东西. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">

JS基础知识回顾:引用类型(一)

在ECMAScript中引用类型是一种数据结构,用于将数据和功能组织在一起,而对象时引用类型的一个实例. 尽管ECMAScript从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构,所以虽然说引用类型与类看起来想死,但他们并不是相同的概念. 不过引用类型有的时候也可以被称为对象定义,因为他们描述的是一类对象所具有的属性和方法. 新对象是使用new操作符后跟一个构造函数来实现的,构造函数本身就是一个函数,只不过该函数时处于创建新对象的目的而定义的. ECMASc

JS基础知识回顾:在HTML中使用JavaScript

想HTML页面中插入JavaScript的主要方法就是使用<script>元素. HTML4.01当中为<script>元素定义了下列6个属性: language(已废弃):原来用于表示编写代码使用的脚本语言,如JavaScript.JavaScript1.2.VBScript等,由于大多数浏览器会忽略此属性,因此就没有必要再用了: type(可选):可以看成是language的替代属性,表示编写代码使用的脚本语言的内容类型,也被称作MIME类型,在未指定此属性的情况下会被默认为t

JS基础知识回顾:ECMAScript的语法(一)

任何语言的核心都必然会描述这门语言最基本的工作原理,而描述的内容通常都要涉及这门语言的语法.操作符.数据类型.内置功能等用于构建复杂解决方案的基本概念. ECMAScript中的一切变量.函数名.操作符都区分大小写. ECMAScript的标识符要符合下列规则:第一个字符必须是字母.下划线或美元符号:其他字符可以是字母.下划线.美元符号或数字. 标识符中的字母也可以包含扩展的ASCII或Unicode字母字符,但是并不推荐. 按照惯例,ECMAScript标识符采用驼峰大小写的格式来书写,尽管没