初识JavaScript

今天开始,陆续总结一下以前学过的JavaScript知识,放在这里供他人阅读的同时,也方便我以后复习。

这篇的所有内容,大部分来自于佟刚老师的尚硅谷教学视频,再结合一下我个人的理解,就成为了这篇《初识JavaScript》。

任何语言的开始,都离不开"HelloWorld",JavaScript也一样,那么,咱们开始吧。

如何点击一个按钮,使得触发一个事件,这个事件弹出"HelloWorld"呢?

代码如下:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>helloworld</title>
<script type="text/javascript">
    //1.当整个HTML文档完全加载成功后触发window.onload事件
    //事件触发时执行后面function里面的语句
    window.onload = function() {
        //2.获取所有的button节点。并取得第一个元素
        var btn = document.getElementsByTagName("button")[0];
        //3.为button的onclick事件赋值:当点击button时,执行函数
        btn.onclick = function() {
            //4.弹出"helloworld"
            alert("helloworld");
        }
    }
</script>
</head>
<body>
    <button>clickMe</button>
    <!-- HTML和JS耦合在一起 -->
    <button onclick="alert('helloworld...')">clickMeToo</button>
</body>
</html>
<!-- 
//写在底部的话当然就不需要window.onload了,读到这一块的时候整个文档也已经加载完毕
<script type="text/javascript">
    var btns = document.getElementsByTagName("button");
    alert(btns.length);
}
</script> 
-->

几乎所有的对于初学者来说还没法理解的内容,都已经加上了注释。

JavaScript有三种节点:1、元素节点;2、属性节点;3、文本节点,如何获得这三种节点,也是我们要学习的内容。

元素节点其实就是所有的带上标签的那种节点,比如<p>,<ul>,<li>等等。

那么,如何获取到元素节点并进行一些相关的操作呢?

代码如下:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>helloworld</title>
<script type="text/javascript">
    //获取指定的元素节点
    window.onload = function() {
        //1.获取 id为bj的节点
        //在编写HTML文档时,需要确保id属性值是唯一的
        //该方法为document对象的方法
        var bjNode = document.getElementById("bj");
        alert(bjNode);
        
        //2.获取所有的li节点:使用标签名获取指定节点的集合
        //该方法为Node接口的方法,即任何一个节点都有这个方法
        var liNodes = document.getElementsByTagName("li");
        alert(liNodes.length);
        
        //获取了id为city这个节点下的所有li
        var cityNode = document.getElementById("city");
        var liNodes2 = cityNode.getElementsByTagName("li");
        alert(liNodes2.length);
        
        //3.根据HTML文档元素的name属性名来获取指定节点的集合
        var genderNode = document.getElementsByName("gender");
        alert(genderNode.length);
        
        //不但谷歌浏览器能获取到,IE11也能获取到
        var bjNode2 = document.getElementsByName("beijing");
        alert(bjNode2.length);
    }
</script>
</head>
<body>
    <p>你喜欢哪个城市?</p>
    <ul id="city">
        <!-- li本身没有name属性 -->
        <li id="bj" name="beijing">北京</li>
        <li>上海</li>
        <li>东京</li>
        <li>首尔</li>
    </ul>
    <br><br>
    <p>你喜欢哪款单击游戏?</p>
    <ul id="game">
        <li id="hj">红警</li>
        <li>实况</li>
        <li>魔兽</li>
        <li>星际</li>
    </ul>
    <br><br>
    gender:
    <input type="radio" name="gender" value="male" />Male
    <input type="radio" name="gender" value="female" />Female
</body>
</html>

属性节点其实就是每个标签里都会有一些属性,这些属性也就是属性节点。比如<input>节点里有id,name属性等等。

那么,如何才能获取属性节点并进行相关操作呢?

代码如下:

<script type="text/javascript">
        //读写属性节点:通过元素节点 . 的方式来获取属性值和设置属性值
        window.onload = function() {
            //属性节点即为某一指定的元素节点的属性
            //1.先获取指定的那个元素节点
            var nameNode = document.getElementById("name");
            //2.再读取指定属性的值
            alert(nameNode.value);
            //3.设置指定的属性的值
            nameNode.value = "尚硅谷";
        }
    </script>
<!-- HTML代码与上面的一样 -->

接下来,就让我们来获取元素节点的子节点吧!

代码如下:

<script type="text/javascript">
        //获取元素节点的子节点
        window.onload = function() {
            //1.获取city节点的所有节点
            var cityNode = document.getElementById("city");
            //2.利用元素节点的childNodes方法可以获取指定元素节点的所有子节点
            //但该方法不实用。换行5个,li4个,所以显示9
            alert(cityNode.childNodes.length);
            //3.获取city节点的所有li子节点
            var cityLiNodes = cityNode.getElementsByTagName("li");
            alert(cityLiNodes.length);
            //4.获取指定节点的第一个节点和最后一个节点:第一个和最后一个都是换行,也就是Text节点
            alert(cityNode.firstChild);
            alert(cityNode.lastChild);
        }
    </script>

还有一种节点没提到,那就是文本节点。文本节点最重要的就是文本的值,文本节点还有节点类型,节点名(#test)。

那么,如何获取并操作文本节点呢?

代码如下:

<script type="text/javascript">
        //获取文本节点
        window.onload = function() {
            //文本节点一定是元素节点的子节点
            //1.获取文本节点所在的元素节点
            var bjNode = document.getElementById("bj");
            //2.通过firstChild定义为到文本节点(lastChild在这里也一样)
            var bjTextNode = bjNode.firstChild;
            //3.通过.nodeValue读取到值
            alert(bjTextNode.nodeValue);
            bjTextNode.nodeValue = "伦敦";
        }
    </script>

所有节点都有的三个属性:nodeType,nodeName,nodeValue,我们现在通过对比元素节点,属性节点和文本节点,稍后得出我们一些结论。

代码如下:

<script type="text/javascript">
        //关于节点的属性:nodeType,nodeName,nodeValue
        //在文档中,任何一个节点都有这3个属性
        //而id,name,value是具体节点的属性
        window.onload = function() {
            //1.元素节点的这3个属性
            var bjNode = document.getElementById("bj");
            //显示li
            alert(bjNode.nodeName);
            //节点类型 1代表元素节点 2代表属性节点 3代表文本节点,这里为1
            alert(bjNode.nodeType);
            //没有值
            alert(bjNode.nodeValue);
            
            //2.属性节点
            var nameAttr = document.getElementById("name").getAttributeNode("name");
            //显示name
            alert(nameAttr.nodeName);
            //显示2
            alert(nameAttr.nodeType);
            //username
            alert(nameAttr.nodeValue);
            
            //3.文本节点
            var bjTextNode = document.getElementsByTagName("li")[0].firstChild;
            //#text
            alert(bjTextNode.nodeName);
            //3
            alert(bjTextNode.nodeType);
            //北京
            alert(bjTextNode.nodeValue);
            
            //nodeName,nodeTpe是只读的,而nodeValue是可以被改变的
            //以上三个属性,只有在文本节点中使用nodeValue读写文本值时使用最多
        }
    </script>

下面是两个小练习:第一个,点击每个li节点,都弹出其文本值。

代码如下:

<script type="text/javascript">
    window.onload = function() {
        //点击每个li节点,都弹出其文本值
        //1.获取所有的li节点
        var liNodes = document.getElementsByTagName("li");
        var num = liNodes.length;
        //2.使用for循环进行遍历出每一个li节点
        for (var i = 0; i < num; i++) {
            //3.为每一个li节点添加onclick响应函数
            liNodes[i].onclick = function() {
                //4.在响应函数中获取当前节点的文本节点的文本值(eclipse中不提示不代表没有)
                //this为正在响应事件的那个节点(不能使用关于i的写法,因为在全部加载完毕之后,i的值肯定是超出循环的那个值,这里是8)
                var textNode = this.firstChild;
                //5.alert打印
                alert(textNode.nodeValue);
            }
            //如果这样写liNodes[i].onclick = alert(this.firstChild.nodeValue);
            //则会直接在读取时弹出,不是一个函数的响应
        }
    }
</script>

第二个,点击每个li节点,若li节点前面没有^^就加上,有就去掉。

代码如下:

<script type="text/javascript">
    window.onload = function() {
        //点击每个li节点,若li节点前面没有^^就加上,有就去掉
        //1.获取所有的li节点
        var liNodes = document.getElementsByTagName("li");
        var num = liNodes.length;

        //2.使用for循环进行遍历出每一个li节点
        for (var i = 0; i < num; i++) {
            //3.为每一个li节点添加onclick响应函数
            liNodes[i].onclick = function() {
                var val = this.firstChild.nodeValue;
                var reg = /^\^{2}/g;
                //4.使用正则表达式判断是否以^^开始
                if (reg.test(val)) {
                    //5.调用字符串的replace(reg,str)
                    val = val.replace(reg, "");
                } else {
                    val = "^^" + val;
                }
                //val只是拿到了this.firstChild.nodeValue的值,val并不是this.firstChild.nodeValue的引用
                //所以处理完毕后需要将val的值再次赋this.firstChild.nodeValue
                this.firstChild.nodeValue = val;
            }
        }
    }
</script>

这篇初识就到这里,以后会陆续总结。

posted @ 2016-07-09 20:57  秦殇灬祸首  阅读(202)  评论(0)    收藏  举报