JavaScript

在JavaScript入门篇中,我们学习了如何插入JS、输出内容及简单的DOM操作,JavaScript进阶篇让您进一步的了解JS的变量、数组、函数、语法、对象、事件、DOM操作,制作简单的网页动态效果。

1.插入

<script type="text/javascript">
      document.write("开启JS之旅!");
</script>

<script src="script.js"></script>

注意: javascript作为一种脚本语言可以放在html页面中任何位置,但是浏览器解释html时是按先后顺序的,所以前面的script就先被执行。
比如进行页面显示初始化的js必须放在head里面,因为初始化都要求提前进行(如给页面body设置css等);而如果是通过事件调用执行的function那么对位置没什么要求的。

尤其要注意的是,如果某个函数不是通过事件调用,但是它使用到了,html下面才出现的id,那么就会出错。id也是先定义再使用的,在id定义前获取id显然是错误的

错误:head中startcount先被调用,但此时id="1"的标签还未定义。
<head>
  <title> 事件</title>
  <script type="text/javascript">

      var num=5;
      function startCount() {
          if (num > 0)
          {
              document.getElementById("1").innerHTML = num;    //id="1",页面中还未定义
              num=num-1;
              setTimeout(startCount,1000);

          }
      }
      startCount();


  </script>
</head>
<body>

  <h1>操作成功</h1>
  <p id="1"></p>秒后回到主页<a>返回</a>
  <input type="button" value="dianji" onclick="startCount()">
  <input type="text" id="2">

</body>
-----------------------------------------------------------------------------------------

正确位置,id="1",先定义再被调用
<body>

<h1>操作成功</h1>
<p id="1"></p>秒后回到主页<a>返回</a>
<input type="button" value="dianji" onclick="startCount()">
<input type="text" id="2">

<script type="text/javascript">

    var num=5;
    function startCount() {
        if (num > 0)
        {
            document.getElementById("1").innerHTML = num;
            num=num-1;
            setTimeout(startCount,1000);

        }
    }
    startCount();


</script>
</body>

2.输出内容

document.write("开启JS之旅!");
alert("xxx");
confirm("xxx");
prompt("xxx");

3.简单DOM操作

document.getElementById("IDname");
document.getElementById("IDname").style.color = "red";  //改变属性
document.getElementById("IDname").removeAttribute("style");  //移除属性

进阶:

JavaScript 可以通过 "==" 比较两个字符串是否相等。

定义二维数组

<script type="text/javascript">

 var myarr = new Array();
 for (var i=0;i < 3;i++)
    {
        myarr[i] = new Array();
        for(var j = 0 ; j < 6;j++)
            myarr[i][j]=i*j;
    }
//没有int
 var Myarr = [[0 , 1 , 2 ],[1 , 2 , 3]]



</script>
事件:

1.鼠标点击事件:onclick
2.鼠标经过事件:onmouseover
3.鼠标离开事件:onmouseout
4.光标聚焦事件:onfocus
4.失焦事件:onblur
5.内容选择事件:onselect
6.文本框内容改变事件:onchange
7.加载事件(onload)

事件会在页面加载完成后,立即发生,同时执行被调用的程序。
注意:1. 加载页面时,触发onload事件,事件写在<body>标签内。
内建对象

1.Date对象

var Udate=new Date(); 

2.字符串对象

var mystr = "I love JavaScript!"

3.Math对象

注意:Math 对象是一个固有的对象,无需创建它,直接把 Math 作为对象使用就可以调用其所有属性和方法。这是它与Date,String对象的区别

4.数组对象

var  数组名= new Array();
var  数组名= new Array(n);
var  数组名 = [<元素1>, <元素2>, <元素3>...];
Window对象
window对象方法
计时器
在js里声明的变量,整个全局都能使用

在JavaScript中,我们可以在设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。
计时器类型:
一次性计时器:仅在指定的延迟时间之后触发一次。
间隔性触发计时器:每隔一定的时间间隔就触发一次。


计时器方法

我们设置一个计时器,每隔100毫秒调用clock()函数,并将时间显示出来,代码如下:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>计时器</title>
<script type="text/javascript">
  var int=setInterval(clock, 100)
  function clock(){
    var time=new Date();
    document.getElementById("clock").value = time;
  }
</script>
</head>
<body>
  <form>
    <input type="text" id="clock" size="50"  />
  </form>
</body>
</html>

取消计时器clearInterval()
语法:

clearInterval(id_of_setInterval)

参数说明:

id_of_setInterval:由 setInterval() 返回的 ID 值。
每隔 100 毫秒调用 clock() 函数,并显示时间。当点击按钮时,停止时间
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>计时器</title>
<script type="text/javascript">
   function clock(){
      var time=new Date();                     
      document.getElementById("clock").value = time;
   }
// 每隔100毫秒调用clock函数,并将返回值赋值给i
     var i=setInterval("clock()",100);
</script>
</head>
<body>
  <form>
    <input type="text" id="clock" size="50"  />
    <input type="button" value="Stop" onclick="clearInterval(i)"  />
  </form>
</body>
</html>
计时器setTimeout()

setTimeout()计时器,在载入后延迟指定时间后,去执行一次表达式,仅执行一次。

语法:setTimeout(代码,延迟时间);
参数说明:
1. 要调用的函数或要执行的代码串。
2. 延时时间:在执行代码前需等待的时间,以毫秒为单位(1s=1000ms)。
clearTimeout(id_of_setTimeout)
参数说明:
id_of_setTimeout:由 setTimeout() 返回的 ID 值。该值标识要取消的延迟执行代码块。
history对象

history对象记录了用户曾经浏览过的页面(URL),并可以实现浏览器前进与后退相似导航的功能。

注意:从窗口被打开的那一刻开始记录,每个浏览器窗口、每个标签页乃至每个框架,都有自己的history对象与特定的window对象关联。

语法:window.history.[属性|方法]<br>
注意:window可以省略。
back()加载history列表中的前一个URL
forward()加载history列表中下一个URL
go()加载history列表中的某个具体的页面
length返回浏览器历史列表中URL数量
Location对象

location用于获取或设置窗体的URL,并且可以用于解析URL。

location.[属性|方法]


location 对象属性

location 对象方法

Navigator对象

Navigator 对象包含有关浏览器的信息,通常用于检测浏览器与操作系统的版本。

screen对象

screen对象用于获取用户的屏幕信息。

语法:
window.screen.属性

DOM对象

HTML文档可以说由节点构成的集合,DOM节点有:

  1. 元素节点:上图中<html>、<body>等都是元素节点,即标签。type:1
  2. 属性节点:元素属性,如a标签的链接属性href="http://www.imooc.com" type:2
  3. 文本节点:向用户展示的内容,如li标签中的JavaScript、DOM、CSS等文本。type:3

注意:也就是说 标签的内容 那些文字 也是一个节点,属于文本节点。

<b id="oldnode">JavaScript</b>
```这里b的下一个节点就是文本节点 JavaScript
**而且设置文本节点的内容是,使用的是 innerHTML,不是value,value用来设置属性的**

实现全选,复选框属性 checked
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>

<body>
    <form>
      请选择你爱好:<br>
      <input type="checkbox" name="hobby" id="hobby1">  音乐
      <input type="checkbox" name="hobby" id="hobby2">  登山
      <input type="checkbox" name="hobby" id="hobby3">  游泳
      <input type="checkbox" name="hobby" id="hobby4">  阅读
      <input type="checkbox" name="hobby" id="hobby5">  打球
      <input type="checkbox" name="hobby" id="hobby6">  跑步 <br>
      <input type="button" value = "全选" onclick = "checkall();">
      <input type="button" value = "全不选" onclick = "clearall();">
      <p>请输入您要选择爱好的序号,序号为1-6:</p>
      <input id="wb" name="wb" type="text" >
      <input name="ok" type="button" value="确定" onclick = "checkone();">
    </form>
    <script type="text/javascript">
    function checkall(){
        var hobby = document.getElementsByTagName("input");
        for(var i=0; i<hobby.length;i++)
        {
            if(hobby[i].name == "hobby")
                hobby[i].checked = true;
        }
      // 任务1 
       
    }
    function clearall(){
        var hobby = document.getElementsByName("hobby");
        for(var i=0; i<hobby.length;i++)
        {
                hobby[i].checked = false;
        }
     // 任务2    
        
    }
    
    function checkone(){
        var j=document.getElementById("wb").value;
        var tar=document.getElementById("hobby"+j);
        tar.checked = true;
     // 任务3
    
    }
    
    </script>
</body>

</html>


#####getAttribute()方法和setAttribute()方法
getAttribute()方法通过元素节点的属性名称获取属性的值。
setAttribute() 方法增加一个指定名称和值的新属性,或者把一个现有的属性设定为指定的值。

语法:
elementNode.getAttribute(name)
elementNode.setAttribute(name,value)


######访问子节点childNodes
访问选定元素节点下的所有子节点的列表,返回的值可以看作是一个数组,他具有length属性。

语法:
elementNode.childNodes
node.firstChild //访问子节点的第一项
node.lastChild
elementNode.parentNode //访问唯一的父节点
nodeObject.nextSibling //访问下一个兄弟节点
nodeObject.previousSibling



#####插入节点

语法:
document.createElement(tagName)
//createElement()方法可创建元素节点。此方法可返回一个 Element 对象。
document.createTextNode(data)
//createTextNode() 方法创建新的文本节点,返回新创建的 Text 节点。
appendChild(newnode)
//在指定节点的最后一个子节点列表之后添加一个新的子节点。
insertBefore(newnode,node);
// 方法可在已有的子节点node前插入一个新的子节点。
nodeObject.removeChild(node)
//removeChild() 方法从子节点列表中删除某个节点。如删除成功,此方法可返回被删除的节点,如失败,则返回 NULL。
node.replaceChild (newnode,oldnew )
//replaceChild 实现子节点(对象)的替换。返回被替换对象的引用。


<script type="text/javascript">

var otest = document.getElementById("test");
var newnode = document.createElement("li");
newnode.innerHTML = "php";
otest.appendChild(newnode)

var element = document.createElement("p");

//创建文本节点,放到p标签后面
var textnode = document.createTextNode("Hello world!");
element.appendChild(textnode);
document.body.appendChild(element);

</script>


>**    var tbody = document.getElementById('table').lastChild; //如果您使用 thead、tfoot 以及 tbody 元素,您就必须使用全部的元素。它们的出现次序是:thead、tfoot、tbody,这样浏览器就可以在收到所有数据前呈现页脚了。您必须在 table 元素内部使用这些标签也就是说你没写上去但是这三个字元素是默认存在的。所以("table").lastChild获取的是最后一个子元素,也就是tbody **

>**动态给标签添加事件,不能使用setAttribute**
      var trs = document.getElementsByTagName("tr");
      for(var i = 0 ; i < trs.length; i++)
      {
          trs[i].onmouseover = function () {
              this.style.backgroundColor = "#f2f2f2";
          }
          trs[i].onmouseout = function(){
              this.style.backgroundColor = "#fff";
          }
      }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容