补充 js在标签中绑定事件
js可以在直接标签中绑定事件和函数
格式:<自定义标签名 JS事件名="javascipt:该事件被触发后所调用的函数方法()"></自定义标签名>
列如:
<li onclick="javascipt:post('+cid+','+i+')"><a href="javascript:void(0)">' + i + '</a></li>
格式二:<自定义标签名 JS事件名="该事件被触发后所调用的函数方法()"></自定义标签名>
列如:
<a class="btn" id="favorite" onclick="addFavorite()"><i class="glyphicon glyphicon-heart-empty"></i>点击收藏</a>
补充:将字符串类型的数字转换为数字
可以将一个为数字的网页元素更改为数字类型.
方法:parseInt(字符串类型的数字变量);
注意:必须内容全部为数字,不然会转换失败
JS中,对象间大致的继承关系.
不多解释了,此图中 Node为createAttribute,createComment,createElement,createTextNode,Element(getElement对象实例化)这五个对象的间接父类对象.
而Document为其直接的子类对象.
函数中,this的用法
在function中,有一个’this’对象.他代表着调用处传递过来的’标签对象’.
如
将标签对象实例化的多种方式
此前我们提到过,通过document.getElementById()的方式来将某个标签对象实例化.
但’getElementById’是通过id来指向某个标签,实际上还有多种方式指向标签.
此处略过getElementById方式,因为已经讲过了.
方式一 根据标签名,获取标签数组
根据标签名称获取标签对象们。返回值是一个数组,如果调用,则需要指定数组索引值
创建格式一:document.getElementsBiTagName("标签名称");
列如:
<input type="button" value="按钮">
<input type="button" value="按钮2">
<input type="button" value="按钮3">
var tagNameOfArr = document.getElementsByTagName("input");
//此时返回了所有对应的标签对象,输出一下长度
document.write("通过标签名称获取到的标签对象总数为:"+tagNameOfArr.length);
创建格式二(不推荐):document.getElementsBiTagName("标签名称")[索引值];
列如:
var tagNameOneOfArr = document.getElementsByTagName("input")[2];
根据标签名称,指定获取其中单个标签对象.
注:不推荐用,因为如果要获取单个标签对象,那么直接在其标签上加个id属性,通过id获取即可.
方式二 根据Class属性值获取标签对象
根据Class属性值获取元素对象们。返回值是一个数组,如果调用,则需要指定数组索引值
创建格式一:document.getElementsByClassName("class属性值");
列如:
<h1 class="nameOfClass">中国第一</h1>
<font class="nameOfClass" color="orange">世界最强</font>
<h2 class="nameOfClass">世界大同</h2>
<a class="nameOfClass" href="http://www.baidu.com"></a>
<script>
var classNameOfArr = document.getElementsByClassName("nameOfClass");
//输出下长度,看看获取到了多少个对象
document.write("通过class属性值获取到的标签对象总数为:"+classNameOfArr.length);
</script>
创建格式二(不推荐):document.getElementsByClassName("class属性值")[索引值];
方式三 根据name属性值获取标签对象
创建格式一:document.getElementsByName("name属性值");
<img name="nameOfname" src="http://file-d.boxuegu.com/defaulthead/14.png"><br>
<select name="nameOfname">选项标签<option value="valueid">哈</option></select><br>
<h2 name="nameOfname">世界大同!</h2><br>
<script>
//创建格式一:document.getElementsByName("name属性值");
var nameOfArr = document.getElementsByName("nameOfname");
//查看多少个
document.write("通过class属性值获取到的标签对象总数为:"+nameOfArr.length);
nameOfArr.setAttribute()
创建格式二(不推荐):document.getElementsByName("name属性值")[索引值];
创建节点对象
概念
节点,通俗说就是一个标签,他有多个子标签,那么每个子标签就是一个节点,而最初的标签(即:最外面的标签)则称之为’最高父级标签(节点)’.
而在很多应用场景中,基层最低的标签则为文本标签,也称之为文本节点(也就是字符串).
而本目录中,则仅讲解节点的创建方式.
说到节点创建的方式,则要明白创建方式因节点的类型不同而不同.
有以下几种方式,其中注释节点和属性节点则省略不讲,因为用得不多.
方式一:createAttribute(name) 创建拥有指定名称的属性节点,并返回新的 Attr 对象。(省略)
方式二:reateComment() 创建注释节点。(省略)
方式三:createElement()创建标签节点。(常用)
方式四:createTextNode()创建文本节点。(常用
注意事项,必读!
一 关于创建文本节点/创建标签(元素)节点时,如果它被当作一个’直接父级节点’,那么需要这个**‘直接父级节点’本身就必须被插入到最高父级的标签中.**
比如,当你要在表格中插入元素时,那么,在’直接父级节点’为’tr’标签的情况下,那么这个’直接父级节点’就必须被appendChild方法插入到该’td’(最高父级标签)中.
而最高父级标签是哪个,不一定要视’直接父级节点’的标签是什么,比如此’h1’标签作为’直接父级节点’,就可以插入到与’h1’毫不相干的最高父级标签中.
如果不这样做,'直接父级节点’和其’隶属的子节点’将只能存在内存中,而不能在网页中显示出来.这样就失去了意义.
二 可以单独将一个’直接父级’的标签节点或文本节点插入到最高父级标签中,但如果是标签节点,则毫无意义.
一 创建标签节点
格式:var 自定义直接父级/隶属子级节点对象名 = document.createElement("标签名");
列如:
var addObjOfTag = document.createElement("h1");
二 创建文本节点
格式:var 自定义隶属子级节点对象名 = document.createTextNode("文本"/字符串变量);
列如:
var addObjOfText = document.createTextNode("你好!");
Node 节点对象的应用
概念
'Node’是一个节点对象,它的主要作用就是能够将之前创建了的节点应用到网页中去运行或者显示出来
appendChild 应用节点对象
appendChild主要用于将创建了的节点对象应用在网页中.
它会向节点的子节点列表的结尾添加新的子节点。
即:既可以向最高父级标签添加子节点,也可以向某个’直接父级(标签)节点’添加节点
格式:自定义最高父级标签对象名/直接父级节点对象名.appendChild(自定义隶属子级节点对象名);
列如:
optionObj.appendChild(textObj);
removeChild 删除节点对象
删除(并返回)当前节点的指定子节点。
格式:自定义最高父级标签对象名/直接父级节点对象名.removeChild(自定义隶属子标签实例化对象 注意,是实例化对象!);
列如:
idOfSelect.removeChild(idOfDadi);
replaceChild() 替换节点
用新节点替换一个子节点。即:以节点对象的方式,将某个子标签实例化对象替换为该节点对象的元素
格式:自定义最高父级标签对象名/直接父级节点对象名.removeChild(欲新设置的自定义隶属子级节点对象名,需要被替换的自定义隶属子标签实例化对象);
列如:
genghuan.replaceChild(huangjiajuTag,dadiId);
节点增删改的例子
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- * Node:节点对象,其他5个的父对象
* 特点:所有dom对象都可以被认为是一个节点
* 方法:
* CRUD dom树:
* 属性:
* parentNode 返回节点的父节点。
-->
</head>
<body>
<select id="idOfSelect" >
<option id="dadi">大地</option>
</select>
<input type="button" id="idOfButton" value="添加列表">
<input type="button" id="idOfButtonTwo" value="删除'大地'列表">
<input type="button" id="idOfButtonThree" value="更改'大地'列表">
<script>
function f() {
/* appendChild():向节点的子节点列表的结尾添加新的子节点。即:既可以向最高父级标签添加子节点,也可以向某个'直接父级(标签)节点'添加节点
格式:自定义最高父级标签对象名/直接父级节点对象名.appendChild(自定义隶属子级节点对象名); */
//用于追加子标签节点到select中
var selectObj = document.getElementById("idOfSelect");
//添加option标签节点
var optionObj = document.createElement("option");
//添加文本
var textObj = document.createTextNode("列表内容1");
//追加文本到option
//自定义直接父级节点对象名.appendChild(自定义隶属子级节点对象名);
optionObj.appendChild(textObj);
//将直接父级标签节点追加到最高父级标签中.
//自定义最高父级标签对象名.appendChild(自定义隶属子级节点对象名);
selectObj.appendChild(optionObj);
}
var buttonObj = document.getElementById("idOfButton");
buttonObj.onclick=f;
//-----------------------------------------------------------
/* * removeChild() :删除(并返回)当前节点的指定子节点。
格式:自定义最高父级标签对象名/直接父级节点对象名.removeChild(自定义隶属子标签实例化对象 注意,是实例化对象!);
*/
var buttonObjTwo = document.getElementById("idOfButtonTwo");
buttonObjTwo.onclick=function (ev) {
var idOfSelect = document.getElementById("idOfSelect");
var idOfDadi = document.getElementById("dadi");
idOfSelect.removeChild(idOfDadi);
}
//---------------------------------------------------------------------
/*
* replaceChild():用新节点替换一个子节点。即:以节点对象的方式,将某个子标签实例化对象替换为该节点对象的元素
*自定义最高父级标签对象名/直接父级节点对象名.removeChild(欲新设置的自定义隶属子级节点对象名,需要被替换的自定义隶属子标签实例化对象)
*/
var buttonObjThree = document.getElementById("idOfButtonThree");
buttonObjThree.onclick=function (ev) {
var genghuan = document.getElementById("idOfSelect");
var dadiId = document.getElementById("dadi");
var huangjiajuTag = document.createElement("option");
var huangjiajuText = document.createTextNode("黄家驹");
huangjiajuTag.appendChild(huangjiajuText);
genghuan.replaceChild(huangjiajuTag,dadiId);
}
</script>
<script></script>
</body>
</html>
ElementById 属性值操作
ElementByld可以对’标签对象’的属性进行增删改
在使用该对象前,需要先通过’getElementByld’将标签进行对象实例化
设置或增加属性
规则:
1 如果属性不存在,则视为添加,
2 如果属性存在 则视为更改属性值
格式:自定义标签对象名.setAttribute("属性名","属性值");
列如:
imgObj.setAttribute("href","http://www.baidu.com");
删除属性
格式:自定义标签对象名.removeAttribute("属性名");
列如:
imgObj.removeAttribute("href");
InnerHTML的强化作用
概念
我们都知道,InnerHTML可以直接对某个标签的代码进行替换.
那么这次,不仅可以替换,还可以在原有的基础上对其进行’代码追加’,而代码追加则需要用到’+='符号
该作用的一个好处是,可以略过’Node节点对象’和createAttribute,createComment,createElement
,createTextNode这四个节点创建对象**,直接实现对节点的增删改查**.
为了节省时间,此时我省略了通过docoment指向标签的标识符从而获取对象的步骤.
使用
格式:自定义标签对象名.innerHTML += "要追加的代码内容";
列如:
htmlObj.innerHTML += "<input type='text'>";
'style’方法直接修改定义属性
概念
任何标签和标签对象都有’style’属性.我们可以通过’style’来修改或定义标签属性
style实际上就是css,
'style’不仅可以作为一个CSS的围堵式标签去美化或修改HTML代码,也可以作为一个方法去美化或修改HTML的代码属性等等
此处以标签对象举例,为了节省时间,此时我同样省略了通过docoment指向标签的标识符从而获取对象的步骤.
使用格式
格式一(推荐):自定义标签对象名.style.属性名 = "属性值";
列如:
htmlObj.style.width = "200px";
格式二(不推荐):自定义标签对象名.style = "属性名1:对应的属性值;属性名2:对应的属性值;属性名3:对应的属性值"
注意:最后一个属性值不需要加分号’;’.不推荐的原因是容易输入错误.
常用事件(补充)
-
常见的事件:
- 点击事件:
- onclick:单击事件
- ondblclick:双击事件
- 焦点事件
- onblur:失去焦点
- onfocus:元素获得焦点。
3. 加载事件:
1. onload:一张页面或一幅图像完成加载。-
鼠标事件:
- onmousedown 鼠标按钮被按下。
- onmouseup 鼠标按键被松开。
- onmousemove 鼠标被移动。
- onmouseover 鼠标移到某元素之上。
- onmouseout 鼠标从某元素移开。
-
键盘事件:
- onkeydown 某个键盘按键被按下。
- onkeyup 某个键盘按键被松开。
- onkeypress 某个键盘按键被按下并松开。
-
选择和改变
- onchange 域的内容被改变。
- onselect 文本被选中。
-
表单事件:
- onsubmit 确认按钮被点击。
- onreset 重置按钮被点击。
- 点击事件:
onload 重要掌握事件
onload事件是一个功能非常强大的事件.
从字面理解就能明白,它的强大在于可以先其它代码加载完毕后,再加载事代码.
这样子的话,甚至script标签都可以直接写在第一行,就能通过Element对象获取标签对象了.