如何学好javascript,外贸网站建设之js学习总结
#js学习总结
js语法要点:js的变量是区分大小写的
_调试js的语法 console.log(变量或对象或数组)_ 针对有返回值
js变量(全局变量与局部变量)

全局变量:
1,在函数外部设置的变量是全局变量
2,在函数内部不用var定义的变量,需要函数调用后才能起作用

局部变量
1,在js函数里面用var声明的变量


## js函数
js函数是有预加载,允许先调用函数,再声明函数  (实际的情况是把函数的声明放入内存,然后再调用函数,这是函数的调用)

_函数先调用后声明的条件,全部代码在一个标记里面,什么叫一个标记就是<scipt></script>,每个标记是独立编译,解释,运行的_
eg:
<script>
    getMyname(); //可以先调用,再声明,必须是要在一个标记体内,分开则不行。
    function getMyname(){
        alert('我的名字叫wilson');
    }    
</script>

### 匿名函数(没有预加载,必须先声明,后调用)
_var 函数名 = function (){ };_

关键词 arguments, 接受所有的实参,数组形式, 但它并不是数组
eg:
function demo(){
     console.log(arguments);
     // arguments[0] = red,  arguments[1]=blue,  argument = green
}
demo('red','blue','green');

匿名函数传参
var a =  function(x,y){
    return x+y;
};

a(5,6) // 11 调用方法

### callee代表当前函数的引用,类似于递归
eg:
function demo(){
    arguments.callee();  //调用本函数
}
demo();

### 函数的返回值 使用return
js函数可以返回任意类型的值(数值,字符串,布尔,对象,nuLL)
return关键字还可以作为直接结束函数的执行
javascript里面一切都是对象,函数也是对象,函数内部还可以返回一个函数

### 函数的调用
传统方式调用 //函数名();

匿名函数自调用
格式: (function(形参){})(参数) 
eg:
(function(x){
    console.log(x);
})('万邦')  //结出的结果是万邦

### 神奇的eval用法
根据上下文环境,将内部的表达式或参数运行起来
eval(alert("123")); //弹出框,123
eval内部参数要求符合语法规则,如果有变量,刚要求先声明才能使用。

## DOM编辑,各个节点都是对象
文档对象模型,通过对节点的操作
在php里面,dom主要是与xml结合使用
在js里面,dom主要是与html结合使用

dom在html里面就是能看到的页面区域
js为了更好的操作DOM,把html标签内容划分了成了很多节点,划分如下:
1,文档节点,document
2,元素节点 -》 主要是指所有的html标签
3,文本节点 -》 主要是文本内容
4,属性节点 -》 主要是指标签的相关属性
5,注释节点

### 如何获得元素节点
1,通过id来获取元素节点,唯一性,getElementByid('id属性值');//直接返回节点值

2,通过标签名称来获取元素节点,getElementsByTagName('tag标签名称') //以数组或集合的形式返回
可以通过这种方式来获取节点元素
eg:
 var inputs = getElementsTagName('input');
 console.log(inputs[0])//用来输出节点元素,还可以用这种方式来输出   console.log(inputs.item(0));
 
 3,通过标签name属性值来获取元素节点,通常用在表单里面。
 getElementsByName('name属性值') //也是以数组或集合的方式返回
 eg: <input type="text" name="password">
 var inputs = getElementsByname('password');
 console.log(inputs.item(0));

### 文本节点的获取
通过子节点的方式来获取 用firstChild或者lastChild
<div>this is text</div>
eg:
var dv = getElementsByTagName('div')[0]; //获取div这个元素节点
_通过 dv.firstChild 来获取文本节点_
console.log(dv.firstChild); // <TextNode textContent = "this is text">
console.log(dv.firstChild.wholeText); // this is test (文本信息)

### 兄弟节点 (在firefox, chrome, safari,opera会给空白节点,ie中不考虑空白节点)
nextSibling   //获得下一个兄弟节点
previousSibling  //获得上一个兄弟节点
childNodes  //获取父节点中所有子节点

用法:  节点元素.兄弟节点 eg dv.nextSibling

###  父节点
parentNode  eg: dv.prarentNode 

## 属性值的操作
何为属性,就是指一个标签内的所有选项
eg:<input **type='' name='' class='' value=''**>加粗的这部分是属性
eg: <a **href='http://www.xingbell.com' addr='xingbell' target=''**></a> 加粗的这部分是属性

获取属性值:1,节点.属性名称;(注意:只要操作W3C规定的属性)
          2,节点.getAttribute (规定和自定义的都可以设置)
**
    eg: 
    var demo = getElementsByTagName('a')[0];
    console.log(demo.href); // http://www.xingbell.com
    console.log(demo.getAttribute('addr'));  //xingbell
**
注意: 自定义属性的获取。

设置属性值:1, 节点.属性名称 = 值;(注意:只要操作W3C规定的属性)
          2, 节点.setAttribute('属性','值');  (规定和自定义的都可以设置)
          
何为自定义的属性(自己可以在任何标签内自定义属性)
eg: <a href="" **Myattr='bannerlink'**></a>

**
    eg: 
    var demo = getElementsByTagName('a')[1];
    console.log(demo.href); // http://www.xingbell.com;
    demo.addr = 'wanbong';
    demo.setAttribute('addr','bong');
**
注意:自定义属性值的设置。

### 获取属性节点的全部属性,通常很少使用 (节点.attributes)
<input type='text' name='username' class='red' value='red' id='username'>
**
    eg:
    var its = getElementById('username');
    var attrs = its.attributes;
    console.log(attrs.value); // value = 'red'
**

#### 节点的创建和追加
1,创建元素节点:
documents.creatElement('tag标签名称');

2,创建文本节点:
documents.creatTextNode('文本内容');
 
**属性的设置: 
节点.setAttribute('名称','值');**

节点的追加:
父节点.appendChild(子节点);
父节点.insertBefore(新节点,旧节点);  //将新节点放到旧节点的前面
父节点.replaceChild(新节点,旧节点);  //新节点替换掉旧节点

#### 节点复制
节点.cloneNode(true/false); 
传递参数
true: 深层复制,节点和子节点全部复制
false: 浅层复制,节点复制,子节点没复制

#### 节点删除
父节点.removeChild(子节点); 

## DOM对css的操作
1,获取css样式
元素节点.style.css样式名称 eg:  divnode.style.width;

2,设置css样式(有则修改,没有则添加)
元素节点.style.css样式名称 = '值';  eg: divnode.style.height = '100px';

注意事项:
1,DOM只能操作行内样式(css样式分为:行内样式,内部样式,外部样式)
行内样式eg:  <div style="width:100xp; backgroud-color:red;"></div>

**2,操作复合样式属性的时候,要去掉中杠,后面首字母要大写**
eg: div.style.backgroudColor = 'red';

# 事件操作
1,什么是事件
就是指能过鼠标,键盘对页面上所做的动作就是事件
**
事件一旦发生需要有事件处理,该事件处理称为『事件驱动』,事件驱动通常由函数担任,如下: onclick, onsubmit, onmouseover, onmouseout, onkeyup, onkeydown, 
onblur, onfocus
**
dom1级的事件方式(最基础的),有4种方式
1, <input type="text" name="username" onclick="demo()">
    function demo(){ this[window]} //这里this代表window
2,<input type="text" name="username" onclick="<script>this[itnode]</script>"
3, itnode.onclick = function(){this[itnode]};
4, itnode.onclick = 函数名;
   function 函数名(){this[itnode]}
   
**Dom2级事件方式 (主要学习内容)**
设置事件 :itnode.addEventListener('事件类型',事件处理[,事件流]);
取消事件 : itnode.removeEventListerner('事件类型',事件处理[,事件流]);

事件类型,主流浏器器没有on, eg: click/mouserover
         IE浏览器有on, eg : onclick/onmouserover
         
e: 
<div id="demo" style="width:200px; background-color:blue;"></div>
eg:
var dv =  getElementById('demo');
**
dv.addEventListerner('click',function(){ ....}); //设置
dv.addEventListerner('click',changecolor);  //设置
**
function changecolor(){
    dv.style.backgroundColor = 'red';
}

**
dv.removeEventListerner('click',changecolor) //取消
**

事件流(true为真:捕捉型,false为假:冒泡型【默认是冒泡型】)
eg dv.addEventListerner('click',changecolor,true);

**IE浏览器(6,7,8)默认是冒泡型,没有参数。但是IE9以后的是支持捕捉型的**

事件对象的运用
function(evt){
  var evnt = evt ? evt : window.event; //获取事件对象
  console.log(evnt.clientX + '--' + evnt.clientY); //相对浏览器dom坐标
  console.log(evnt.pageX + '--' + evnt.pageY); //相对浏览器dom坐标,考虑滚动条
  console.log(evnt.screenX + '--' + evnt.screenY); //相对屏幕
}

事件对象阻止浏览器的默认动用,就是指我们通常在提交表单的时候,在验证表单字段不正确的情况下,阻止表单的提交
eg:
<form name="form" method="post" action="">
    <p>用户名: <input type="text" name="user"></p>
    <p><input type="password" name="pass"></p>
    <p><input type="text" name="mail"></p>
    <P><input type="submit" value="submit">
</form>
<script>
 var fm  = getElementsByTagName('form')[0];
 fm.addEventListerner('submit', function(Evt){
     if(fm.user.value == ''){
        alert('表单信息不正确');
        // return false; // dom1级事件阻止表单提交方式,不适合于dom2级
        evt.preventDefault(); dom2级事件阻止表单提交方式
     }
 });
</script>

###### 加载事件
我们通常在写js的时候,有时会写在html代码的最前面,当执行时,html不起用,原因是因为js需要html和css的加载环境,要等html和css先加载完后,再执行js才可以。所以我们之前写的js代码在放到最后面的原因。如果要js代码想放到最前面,则需要加载事件

最佳js加载事件的写法如下
<html>
.....
<script>
   function jz(){
      var dv = getElementByTagName('div')[0];
      dv.addElentListerner('click', function(){
        this.style.backgroundColor = 'red';
      });
   }
   window.onload = function(){
        jz();
        ...//想加载哪些事件就加载事件,这种方法灵活
   }
</script>
<body>
  <div></div>
</body>

### BOM(大致了解一下) 
主要操作dom区外的浏览器菜单等区域
平时主要是操作地址栏跳转, location  //类似 location.href=
另外操作history(历史记录)history.go()类型这样的

window对象常用方法
alert(); //弹出框
confirm()//确认框

open();
close();
print();
setTimeout(); //定时器函数
clearTimeout();  //取消定时器函数

innerHTML :获取元素节点的内嵌内容
eg:
<script type="text/javascript">
function getInnerHTML()
  {
  alert(document.getElementById("tr1").innerHTML);
  }
</script>
</head>
<body>

<table border="1">
<tr id="tr1">
<th>Firstname</th>
<th>Lastname</th>
</tr>
<tr id="tr2">
<td>Peter</td>
<td>Griffin</td>
</tr>
</table>
<br />
<input type="button" onclick="getInnerHTML()" value="Alert innerHTML of table row" />
// 弹出的结果如下
<th>Firstname</th>
<th>Lastname</th>

###### setInterval 处理的是全局变量

##### open方法 (创建子级页面)
function newpage(){
    //window.open('显示页面的名称','页面打开方式','参数');
    window.open('11.html','_blank');
}
<input type="text" name="" value="" onclick="newpage()">

### 作用域链
先执行加载函数,然后再执行变量,注意执行的顺序,同名函数与变量是有顺序的。

外贸网站建设专家技术原创,javascript 入门总结(一),总结二将在后面推出。


在线咨询
索要报价
返回顶部