JavaScript、DOM

JavaScript是基于对象和事件的脚本语言

一、JavaScript特点

1、交互性:信息的动态交互
2、安全性:不允许直接访问本地硬盘),它可以做的就是信息的动态交互。
3、跨平台性:只要是可以解释Js的浏览器都可以执行,和平台无关。

二、JavaScript与Java不同

1、JavaScript是Netscape公司的产品,Java是Sun公司的产品
2、JavaScript是基于对象,Java是面向对象。
3、JavaScript只需解释就可以执行,Java需要先编译成字节码文件,再执行。
4、JavaScript是弱类型,Java是强类型。

三、JavaScript的组成

JavaScript语法基础
使用JS操作网页(DOM)
使用JS操作浏览器(BOM)

四、JS引入方式与引入位置

向HTML页面插入JavaScript的主要方法,就是使用<script元素>。使用<script>元素的方式有两种:直接在HTML页面中嵌入JavaScript代码和包含外部的JavaScript文件。

  1. JS代码存放在标签对<script>...</script>中。
  2. 使用script标签的src属性引入一个js文件。(方便后期维护,扩展)
    例:<script type=”text/javascript” src=”test.js”></script>
    注:规范中script标签中必须加入type属性。
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Day2</title>
   <!--内部引入-->
   <!-- <script type="text/javascript">
        alert("JavaScript");
    </script>-->
    <!--外部引入-->
    <script  type="text/javascript" src="Js/Js1.js"></script>
</head>
<body>

</body>
</html>
注意:

1、页面上可以有多个<script>标签
2、<script>标签按顺序执行
3、<script>标签可以出现在任意的页面位置
4、<script>标签一定要写</script>关闭,而不能<script/>这样关闭。否则没有任何错误信息,但是没有运行结果。

五、JacaScript语法

1、常用函数

window.alert()或写为 alert() :显示一个提示框显示内容。
window.document.write() :在网页的当前位置处写内容。

2、变量

变量是弱类型的
与 Java不同,ECMAScript 中的变量无特定的类型
定义变量时只用var 运算符,可以将它初始化为任意值。

var color = "red";
var num = 25;
var flag = true;

typeof()可以用来查看当前变量的数据类型

<script type="text/javascript" >
            var a = 100;
            var b = 3.14;
            var c = true;
            var d = "hello";
            document.write(a + "<br/>");
            document.write(b + "<br/>");
            document.write(c + "<br/>");
            document.write("<hr/>");//分割线
            document.write( typeof a + "<br/>");
            document.write( typeof b + "<br/>");
            document.write( typeof c + "<br/>");
            document.write( typeof d + "<br/>");    
    </script>
注意:如果一个变量没有初始化值的时候,其类型为undefined类型。表示没有定义。

3、流程控制语句

判断 if()

if (condition) statement1 else statement2

选择switch() case
function test6() {
        var color = "xx";
        var value1 = "red", value2 = "green";
        switch(color) {
            case value1:
                alert("红色");
                break;
            case value2:
                alert("绿色");
                break;
            default:
                alert("执行默认default");
        }
    }
循环

while循环

//while循环
var i = 0;
while (i < 10) {
  i += 2;
}

for循环

iCount = 6;
for (var i = 0; i < iCount; i++) {
  alert(i);
}

for in 语句: 用于枚举对象的属性或者遍历一个数组的元素

for (sProp in window) {
  alert(sProp);
}

with 语句 : 在存取对象属性和方法时就不用重复指定参考对象。

<script type="text/javascript">
            with(document){
              write("您好 !");
              write("<br>这个文档的标题是 : \"" + title + "\".");
              write("<br>这个文档的 URL 是: " + URL);
              write("<br>现在您不用每次都写出 document 对象的前缀了 !");
           }
</script>
99乘法表案例
<script>
    document.write("<table border='1px' bordercolor='green'>" );
    for ( var i = 1; i <= 9; i++){
        document.write("<tr>");
        for (var j = 1; j <= i; j++){
            document.write("<td>");
            document.write(i +"*"+j+"="+i*j);
            document.write("</td>");
        }
        document.write("</tr>");
    }
    document.write("</table>");
</script>

4、数组

指定长度
var arrs=new Array(20);
指定元素
var arrs=new Array("hello");
创建一个包含3个字符串的数组
var arrs=["aa","bb","cc"];
数组遍历:

        for(var i = 0; i < arr.length; i++){
            alert(arr[i]);
        }   
        或
        for( var i in arr ){
            // i 是遍历出的数组中的索引,从0开始,一直到最大索引。
            // 如果有其他属性,也会遍历出来,其实索引就是数组对象的属性。
            alert(arr[i]);
        }
注意:

JS数组可以动态增长:

5、JS的函数

函数格式
    Function 函数名(参数列表){
    代码;
    return 返回值; //return 不是必须的.
}
    示例:
        function foo() {
            alert("test");
        }
        function foo2( a ){
            alert(a);
            return; // 没有返回值,表示方法执行完了,后面如果有代码就不会执行了
        }
        function foo3( a, b ){
            alert(a + b);
        }
        function foo4( a, b ){
            return a + b;
        }
特点:

1、使用function关键字定义函数。
2、没有任何的返回值类型。
3、函数的定义优先执行,与顺序无关。
4、可以通过函数名赋值函数,函数变量的类型是function对象。
5、参数列表不能有var关键字。
6、函数的参数列表在具体调用的时候实参个数可以和形参个数不同。
7、JavaScript函数天然的支持可变参数。
8、同名的函数最后声明会覆盖前面以声明。JavaScript中没有函数重载。

六、JavaScript对象

1、String对象

//通过构造函数创建String 对象
var b = new String("java");
var c = new String("java");
document.write(b + "," + c);
document.write(b == c);
//false
//比较字符串的值是否相等
document.write(b.valueOf() == c.valueOf());

属性:length 字符串的长度
document.write(a.length);

方法

1、与HTML相关的方法
bold() 将字体加粗
fontcolor()设置字体的颜色
fontsize设置字体的大小
link()设置链接
sub()显示为下标
sup()显示为上标
2、与java相似的方法
concat()连接字符串
charAt()返回指定位置的下标,若字符位置不存在则返回空字符串
indexOf()检索字符串的位置,若不存在返回-1
split() 将字符串切分为字符数组
replace()替换与正则表达式匹配的子串replace("a","b") b替换a
substr()从第几位开始向后截取几位
substring()提取字符串中两个指定的索引号之间的字符(两个参数,包头不包尾)

2、Array对象

方法

concat()连接两个数组,返回一个新的数组
join()根据指定字符将数组分割(替换一般数组中用逗号进行数组分隔)
push()向数组的末尾添加一个或多个元素,并返回新的长度
pop()删除并返回最后一个元素
reverse()颠倒数组中元素的顺序
sort()对当前数组进行排序,并返回已经进行了排序的此Array对象
shift()移除数组中的第一个元素并返回该元素。如果该数组为空,那么将返回 undefined。
unshift([item1[, item2 [, . . . [, itemN]]]])将指定的元素插入数组开始位置并返回该数组。
splice(start, deleteCount, [item1[, [, . . . [,itemN]]]])移除从 start 位置开始的指定个数的元素,并插入新元素

3、Date对象

获取当前时间var date = new Date();
toLocaleString()将时间转化为中国习惯的年月日小时分钟

    <script>
        var date = new Date();
        document.write(date);//Mon Apr 08 2019 19:53:53 GMT+0800 (中国标准时间)
        document.write("<br>");
        document.write(date.toLocaleString());//2019/4/8 下午7:53:53
    </script>

getFullYear从 Date 对象以四位数字返回年份
getMonth()从 Date 对象返回月份 (0 ~ 11)
getDate()从 Date 对象返回日(1~31)
getDay()从 Date 对象返回星期(0~6)
getHours()返回 Date 对象的小时 (0 ~ 23)
getMinutes()返回 Date 对象的分钟 (0 ~ 59)
getSeconds()返回 Date 对象的秒数 (0 ~ 59))

//获取系统时间
    var date = new Date();
    //获取年 月 日时分秒
    var str = date.getFullYear() + "年" + (date.getMonth() + 1) + "月" 
    + date.getDate() + "日" + "星期" + date.getDay() + " " + date.getHours() + "时" 
    + date.getMinutes() + "分" + date.getMinutes() + "分" + date.getSeconds() + "秒"

getTime()返回 1970 年 1 月 1 日至今的毫秒数

4、Math对象(静态方法:Math.方法)

ceil()对一个数进行上舍入
floor()对一个数进行下舍入
round()四舍五入
random()返回 0 ~ 1 之间的随机数

例:获得一个1~10的随机数
 document.write(Math.ceil(Math.random()*10));

5、JS的全局函数

eval()执行JavaScript代码
excape()对字符(中文)串进行编码
decodeURI解码某个编码的 URI
isNaN检查某个值是否是数字(是数字返回false,不是数字返回true)
parseInt将字符串类型转化为整数。

6、JS中的重载

JavaScript中没有重载,但是可以通过其他方式模拟重载
<script>
     function add(){
           if(arguments.length == 2){
               return arguments[0] + arguments[1];
           }
           else if(arguments.length == 3){
               return arguments[0] + arguments[1] + arguments[2];
           }
           else if(arguments.length == 4){
               return arguments[0] + arguments[1] + arguments[2] + arguments[3];
           }
       }
       alert(add(12,34));
       alert(add(12,34,9));
       alert(add(12,34,90,2));
</script>

7、JS的BOM对象

全称 Browser Object Model,浏览器对象模型。
document.write(navigator.appName);获取当前浏览器的名称
screen获取屏幕的宽和高

       document.write("屏幕的宽:"+screen.width);
       document.write("<br>");
       document.write("屏幕的高:"+screen.height);

location获取到请求的URL地址

      document.write("请求的URL地址:"+location.href);

window窗口对象,顶层对象(所有的BOM对象都在window中操作)
alert()在页面弹出一个框
window.confirm()显示带有一段消息以及确认按钮和取消按钮的对话框。

        var flog = window.confirm("是否删除")
        if(flog == true){
            alert("删除成功")
        }else{
            alert("删除失败")
            alert("删除失败")
        }
定时器

setInterval()按照指定的周期(以毫秒计)来调用函数或计算表达式。
setTimeout()在指定的毫秒数后调用函数或计算表达式。
clearInterval()取消由 setInterval() 设置的定时。
clearTimeout()取消由 setTimeout() 方法设置的定时。

8、JS的DOM对象

DOM全称Document Object Model,即文档对象模型。
可以使用dom提供的对象的属性个方法对标记型文档进行操作

浏览器在解析HTML页面标记的时候,其实不是按照一行一行读取并解析的,
而是将HTML页面中的每一个标记按照顺序在内存中组建一颗DOM树,
组建好之后,按照树的结构将页面显示在浏览器的窗口中。
节点层次
HTML网页是可以看做是一个树状的结构,如下:
    html
     |-- head
     |     |-- title
     |     |-- meta
     |     ...
     |-- body
     |     |-- div
     |     |-- form
     |     |     |-- input
     |     |     |-- textarea
     ...   ...   ...

    这是一颗树,是由多个节点(Node)组成的,节点的类型有很多种。
    节点最多有一个父节点,可以有多个子节点。

9、document对象

Document对象代表整个 HTML 文档,可用来访问页面中的所有元素。
document.write()输出内容
document.getElementById()获取指定 id 的对象的引用。

    <input id="id" type="text" value="aaaa"/>
    <script>
       input1= document.getElementById(id);
      alert(input1.value);
    </script>

document.getElementsByName()返回带有指定名称的对象集合。

    <input  type="text" name="name1" value="aaaa"/><br>
    <input  type="text" name="name1" value="bbbb"/><br>
    <input  type="text" name="name1" value="cccc"/><br>
    <input  type="text" name="name1" value="dddd"/><br>
    <input  type="text" name="name1" value="eeee"/><br>

    <script type="text/javascript">
       var inputs = document.getElementsByName(name1);
        window.alert(inputs.length);
    </script>

document.getElementsByTagName()返回带有指定标签名的对象集合。

案例:在ul末尾添加结点
    <ul id="id1">
        <li>1111</li>
        <li>2222</li>
        <li>3333</li>
        <li>4444</li>
    </ul>
    <input type="button" value="添加" onclick="add();" />

    <script type="text/javascript">
        function add() {
            //获取到ul标签
            var ul1 = document.getElementById("id1");
            //创建li标签
            var li1 = document.createElement("li");
            //创建文本
            var text = document.createTextNode("5555");
            //把文本加入到li下面
            li1.appendChild(text);
            //把li加入到ul下面
            ul1.appendChild(li1);
        }
    </script>

10、元素对象(element对象)

getAttribute()获取属性里面的值
setAttribute("a","b")添加属性和值
removeAttribute()删除属性里面的值

<input type="text"  id="id1" value="abcd"/>
    <script type="text/javascript">
        var input1 = document.getElementById("id1");
        alert(input1.value);
        alert(input1.getAttribute("class"))
        alert(input1.setAttribute("class","hah"));
        alert(input1.getAttribute("class"));
        alert(input1.removeAttribute("class"));
    </script>

getElementsByTagName()获取标签下面的子标签

11、Node对象

nodeType 节点类型

        nodeType 属性可返回节点的类型。    
        ---------------------------------
        元素类型 节点类型 
        ------------------
          元素        1       就是标签元素,例<div>..</div>
          文本        3       标签元素中的文本
          注释        8       表示为注释

nodeName 节点名称

        nodeName 属性含有某个节点的名称。
        --------------------------------
        元素节点的 nodeName 是标签名称 
        属性节点的 nodeName 是属性名称 
        文本节点的 nodeName 永远是 #text 
        文档节点的 nodeName 永远是 #document 

nodeValue 节点值

        nodeValue
        对于文本节点,nodeValue 属性是所包含的文本。
        对于属性节点,nodeValue 属性是属性值。
        对于注释节点,nodeValue 属性注释内容。
        nodeValue 属性对于文档节点和元素节点是不可用的。
获取标签对象
  <input type="text"  id="id1" value="abcd"/>
    <script type="text/javascript">
        var id2 = document.getElementById("id2");//获取属性
        alert(id2.nodeType);//1
        alert(id2.nodeName);//input
        alert(id2.nodeValue);//null
     </script>
获取属性
    <input type="text"  id="id1" value="abcd"/>
    <script type="text/javascript">
        var id2 = input1.getAttributeNode("id");//获取属性
        alert(id2.nodeType);//2
        alert(id2.nodeName);//id
        alert(id2.nodeValue);//id1
     </script>
获取文本
<span id="id2">哈哈哈哈</span>
    <script type="text/javascript">
        var input1 = document.getElementById("id2");//获取文本
        var text = input1.firstChild;
        alert(text.nodeType);//3
        alert(text.nodeName);//#text
        alert(text.nodeValue);//哈哈哈哈
    </script>
针对标签的操作

父节点:parentNode
子节点:childNodes firstChild lastChild
获取下兄弟(获取弟弟):nextSibling
获取大哥: previousSibling

        //获取父节点.
        alert(form.parentNode.nodeName);
        // 获取子节点(Node 包含 文本,注释,标签)
        var childArr = form.childNodes;
        alert(childArr.length);
        // 获取第一个孩子.
         var first = form.firstChild;
         alert(first);
         //最后一个孩子.
         var last = form.lastChild;
         alert(last);
         // 获取下兄弟(获取弟弟)
         var sibling = form.nextSibling;
         alert(sibling.nodeName);
         // 获取大哥
         var previous = form.previousSibling;
         alert(previous.nodeName);

12、操作DOM树

appdndChild添加子节点到末尾,类似于剪切粘贴的效果

    <div id="div1">
        <ul id="div1ul">
            <li>abc</li>
            <li>bcd</li>
            <li>cde</li>
        </ul>
    </div>
    <div id="div2">

    </div>
    <input type="button" value="add1" onclick="add();"/>
<script type="text/javascript">
    function add(){
        //获取到div2
        var div2 = document.getElementById("div2");
        //获取到ul
        var ul2 = document.getElementById("div1ul")
        div2.appendChild(ul2);
    }
</script>

insertBefore(newNode,oldNode)在某节点之前添加一个新节点

<ul id="ul1">
        <li id="li1">abc</li>
        <li id="li2">bcd</li>
        <li id="li3">cde</li>
        <li id="li4">def</li>
    </ul>
    <input type="button" value="insert" onclick="insert1();"/>
    <script type="text/javascript">
        function insert1(){
            //在<li>cde</li>之前添加<li>添加内容</li>
            //获取到li<li>cde</li>
            var li = document.getElementById("li3");
            //创建li标签
            var li5 = document.createElement("li");
            //创建文本内容
            var text5 = document.createTextNode("添加内容");
            //将文本内容添加在li下
            li5.appendChild(text5);
            //获取到ul
            var ul2 = document.getElementById("ul1");
            //将li添加到ul下
            ul2.insertBefore(li5,li3);
        }
    </script>

removeChild()删除节点,通过父节点删除,不能自己删除自己
replaceChild(newNode,oldNode)替换节点通过父节点替换子节点
cloneNode(Boolean)复制节点(Boolean判断是否复制节点)

13、innerHTML

这个标签不是DOM属性的内容,但是大多数浏览器都支持的属性

第一个作用:获取文本内容
 <span id="sp1">哈哈哈哈呵呵呵呵</span>
    <script type="text/javascript">
       var span1 =  document.getElementById("sp1");
       alert(span1.innerHTML);
    </script>
第二个作用:向标签里面设置内容(可以是HTML代码)
<span id="sp1">哈哈哈哈呵呵呵呵</span>
    <div id="div1">

    </div>
    <script type="text/javascript">
       var span1 =  document.getElementById("sp1");
        var div1 = document.getElementById("div1");
        div1.innerHTML = "<span id=\"sp1\">哈哈哈哈呵呵呵呵</span>";
    </script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容