JavaScript 基础操作总结(二)

1. 创建一个元素节点:

1). createElement(): 按照给定的标签名创建一个新的元素节点。

方法只有一个参数: 被创建的元素节点的名字,是一个字符串

方法的返回值:是一个指向新建节点的引用指针 。返回值是一个元素节点,

所以它的 nodeType 属性值等于 1.

**新元素节点不会自动添加到文档里,它只是一个存在于 JavaScript 上下文的对象

3. 为元素节点添加子节点:

1). appendChild():

var reference = element.appendChild(newChild);

给定子节点 newChild 将成为给定元素节点 element 的最后一个子节点。

方法的返回值是一个指向新增子节点的引用指针。

4. 创建一个文本节点:

1). createTextNode(): 创建一个包含着给定文本的新文本节点。

这个方法的返回值是一个指向新建文本节点引用指针。

它是一个文本节点,所以它的 nodeType 属性等于 3.

方法只有一个参数:新建文本节点所包含的文本字符串。新元素节点不会自动添加到文档里

//1. document.createElement(elementTagName)
// 新创建一个元素节点,返回值为指向元素节点的引用
//<li></li>
var liNode = document.createElement("li");
// 创建"西安" 的文本节点
//<li>西安</li>
var xaNode = document.createTextNode("西安");
liNode.appendChild(xaNode);
var cityNode = document.getElementById("city");
//2. elementNode.appendChild(newChild): 为 element
// 新添加一个 newChild 子节点,该子节点将作为 elementNode 的最后一个子节点
cityNode.appendChild(liNode);

需求1:点击 submit 按钮时,检查是否选择 type,若没有选择给出提示:"请选择类型"
检查文本框中是否有输入(可以除去前后空格),若没有输入,则给出提示:"请输入内容"
若检查都通过,则在相应的 ul 节点中添加对应的 li 节点
需求2. 使包括新增的 li 都能响应 onclick 事件,弹出文本值
<script type="text/javascript">
window.onload = function(){
function showContent(liNode){
alert("^_^" + liNode.firstChild.nodeValue);
}
var liNodes = document.getElementsByTagName("li");
for(var i = 0; i < liNodes.length; i++){
liNodes[i].onclick = function(){
showContent(this);
}
}
//1. 获取 #submit 对应的按钮 submitBtn
var submitBtn = document.getElementById("submit");
//2. 为 submitBtn 添加 onclick 响应函数
submitBtn.onclick = function(){
//4. 检查是否选择 type,若没有选择给出提示:"请选择类型"
//4.1 选择所有的 name = "type" 的节点的 types
var types = document.getElementsByName("type");
//4.2 遍历 types,检查其是否有一个 type 的checked 属性存在,
var typeVal = null
for(var i = 0; i < types.length; i++){
//就可说明有一个 type 被选中:通过 if(元素节点.属性名) 来判断元素节点是否有该属性
if(types[i].checked){
typeVal = types[i].value;
break;
}
}
//4.3 若没有任何一个 type 被选中,则弹出:"请输入类型".响应方法结束,return false;
if(typeVal == null){
alert("请选择类型");
return false;
}
//5. 获取 name="name" 的文本值:通过 value 属性: nameVal
var nameEle = document.getElementsByName("name")[0];
var nameVal = nameEle.value;
//6. 去除 nameVal 的前后空格
var reg = /^\s*|\s*$/g;
nameVal = nameVal.replace(reg, "");
// 使 name 文本框也去除前后空格
nameEle.value = nameVal;
//7. 把 nameVal 和 "" 进行比较,若是 "" 说明只输入了空格,弹出"请输入内容",方法结束 return false
if(nameVal == ""){
alert("请输入内容");
return false;
}
//8. 创建 li 节点
var liNode = document.createElement("li");
//9. 利用 nameVal 创建文本节点
var textNode = document.createTextNode(nameVal);
// 为新创建的 li 节点创建响应函数
liNode.onclick = function(){
showContent(this);
}
//10. 把 9 加为 8 的子节点
liNode.appendChild(textNode);
//11. 把 8 加为选择的type 对应的 ul 的子节点
document.getElementById(typeVal).appendChild(liNode);
//3. 在 onclick 响应函数的结尾添加 return false,就可以取消提交按钮的默认行为
return false;
}
}
</script>
<form action="dom-4.html" name="myform">
<input type="radio" name="type" value="city">城市
<input type="radio" name="type" value="game">游戏
name: <input type="text" name="name"/>
<input type="submit" value="Submit" id="submit"/>
</form>

5. 节点的替换

1). replaceChild(): 把一个给定父元素节点里的一个子节点替换为另个子节点

var reference = elementNode.replaceChild(newChile, oldChild);

返回值是一个指向已被替换的那个子节点的引用指针

2). 该节点除了替换功能意外还有移动的功能。

3). 该方法只能完成单向替换,若需要使用双向替换需要自定义函数

// 自定义互换两个节点的函数
function replaceEach(aNode, bNode){
//1. 获取 aNode 和 bNode 的父节点,使用 parentNode 属性
var aParent = aNode.parentNode;
var bParent = bNode.parentNode;
if(aParent && bParent){
//2. 克隆 aNode 或 bNode
var aNode2 = aNode.cloneNode(true);
//3. 分别调用 aNode 和 bNode 的父节点的 replaceChild() 方法实现节点的互换
bParent.replaceChild(aNode2, bNode);
aParent.replaceChild(bNode, aNode);
}
}
*************************************************************************************
//需求: 为所有的 li 节点添加 onclick 响应函数
//  实现 city 子节点和 game 子节点对应位置的互换
window.onload = function(){
// 自定义互换两个节点的函数
function replaceEach(aNode, bNode){
//1. 获取 aNode 和 bNode 的父节点,使用 parentNode 属性
var aParent = aNode.parentNode;
var bParent = bNode.parentNode;
if(aParent && bParent){
//2. 克隆 aNode 或 bNode
var aNode2 = aNode.cloneNode(true);
//在克隆节点的同时交换 onclick 事件
aNode2.onclick = aNode.onclick;
//在克隆节点的同时交换 index 属性
aNode2.index = aNode.index;
//3. 分别调用 aNode 和 bNode 的父节点的 replaceChild() 方法实现节点的互换
bParent.replaceChild(aNode2, bNode);
aParent.replaceChild(bNode, aNode);
}
}
//1. 获取所有的 li 节点
var liNodes = document.getElementsByTagName("li");
//2. 为每一个 li 节点添加 onclick 响应函数
for(var i = 0; i < liNodes.length; i++){
liNodes[i].index = i;
liNodes[i].onclick = function(){
//3. 找到和当前节点对应的 li 节点
var targetIndex = 0;
if(this.index < 4){
targetIndex = 4 + this.index;
}else{
targetIndex = this.index - 4;
}
//交换 index 属性
var tempIndex = this.index;
this.index = liNodes[targetIndex].index;
liNodes[targetIndex].index = tempIndex;
//4. 节点互换
replaceEach(this, liNodes[targetIndex]);
}
}
}

6. 删除节点:
1). removeChild(): 从一个给定元素里删除一个字节点
var reference = element.removeChild(node);
返回值是一个指向已被删除的子节点的引用指针。
某个节点被 removeChild() 方法删除时,这个节点所包含的所有子节点将同时被删除
如果想删除某个节点,但不知道它的父节点时哪一个,parentNode 属性可以帮忙
// 为每个 li 节点 添加一个 confirm(确认对话框):确定要删除 xx 信息吗
// 若确定,则删除
var liNodes = document.getElementsByTagName("li");
for(var i = 0; i < liNodes.length; i++){
liNodes[i].onclick = function(){
var flag = confirm("确定要删除" + 
this.firstChild.nodeValue + "的信息吗?");
if(flag){
this.parentNode.removeChild(this);
}
}
}

<script type="text/javascript">
/*
* 为 #employeetable 的所有 a 节点添加 onclick 响应函数
* 1. 弹出确认对话框: 确定要删除 xx 的信息吗? xx 为当前 a 节点所在的 td 所在的 tr 的第一个
*  td 子节点的文本值,且要去除前后空格
* 2. 若点击 "确认",则删除 a 节点所在的行
*
* 注意:
* 1. a 节点是一个超级链接,可以在其 onclick 事件中通过返回 false,来取消默认行为
* 2. tr 的之间父节点是 tbody,而不是 table
* 3. 可以把去除前后空格的代码写成一个 trim(str) 函数。
* 需求2: 为 #addEmpButton 添加 onclick 响应函数
*1. 获取 #name, #email, #salary 的文本框的值
*2. 利用 1 获取的文本值创建 3 个它的节点,再创建一个 tr 节点。并把以上的 3 个td 节点加为
* tr 节点的子节点
<tr>
<td>Tom</td>
<td>[email protected]</td>
<td>5000</td>
</tr>
*3. 再创建一个 td 节点:<td><a href="deletEmp?id=001">Delete</a></td>
*4. 把 3 创建的 td 也加为 tr 节点的子节点
*5. 再把 tr 加为 #employeetable 的 tbody 子节点的子节点
*6. 为新创建的 tr 的 a 子节点添加 onclick 响应函数,使其也具备删除的功能。
*/
window.onload = function(){
function removeTr(aNode){
var trNode = aNode.parentNode.parentNode;
var textContent = trNode.getElementsByTagName("td")[0]
.firstChild.nodeValue;
//消除前后空格
textContent = trim(textContent);
var flag = confirm("确定要删除" + textContent + "的信息吗?");
if(flag){
trNode.parentNode.removeChild(trNode);
}
return false;
}
//设置 delete 的行为(删除的是 tr)
var aNodes = document.getElementById("employeetable")
.getElementsByTagName("a");
for(var i = 0; i < aNodes.length; i++){
aNodes[i].onclick = function(){
removeTr(this);
return false;
}
}
//***************************新增功能2
document.getElementById("addEmpButten").onclick = function(){
//value: 用于获取 HTML 表单元素的值;nodeValue:只用于获取文本节点的文本值
var nameVal = document.getElementById("name").value;
var emailVal = document.getElementById("email").value;
var salaryVal = document.getElementById("salary").value;
var nameTd = document.createElement("td");
nameTd.appendChild(document.createTextNode(nameVal));
var emailTd = document.createElement("td");
emailTd.appendChild(document.createTextNode(emailVal));
var salaryTd = document.createElement("td");
salaryTd.appendChild(document.createTextNode(salaryVal));
var tr = document.createElement("tr");
tr.appendChild(nameTd);
tr.appendChild(emailTd);
tr.appendChild(salaryTd);
var aNode = document.createElement("a");
aNode.href = "deletEmp?id=xxx";
aNode.appendChild(document.createTextNode("Delete"));
var aTd = document.createElement("td");
aTd.appendChild(aNode);
tr.appendChild(aTd);
aNode.onclick = function(){
removeTr(this);
return false;
}
document.getElementById("employeetable")
.getElementsByTagName("tbody")[0]
.appendChild(tr);
}
//去除前后空格
function trim(str){
var reg = /^\s*|\s*$/g;
return str.replace(reg, "");
}
}
</script>
<body>
<center>
<br></br>添加新员工<br></br>
name:<input type="text" name="name" id="name"/>&nbsp;&nbsp;
email:<input type="text" name="email" id="email"/>&nbsp;&nbsp;
salary:<input type="text" name="salary" id="salary"/>
<br></br>
<button id="addEmpButten" value="abc">Submit</button>
<br></br>
<hr>
<br></br>
<table id="employeetable" border="1" cellpadding="5" cellspacing="5">
<tbody>
<tr>
<th>Name</th>
<th>Email</th>
<th>Salary</th>
<th>&nbsp;</th>
</tr>
<tr>
<td>Tom</td>
<td>[email protected]</td>
<td>5000</td>
<td><a href="deletEmp?id=001">Delete</a></td>
</tr>
<tr>
<td>Jerry</td>
<td>[email protected]</td>
<td>8000</td>
<td><a href="deletEmp?id=002">Delete</a></td>
</tr>
<tr>
<td>Bob</td>
<td>[email protected]</td>
<td>15000</td>
<td><a href="deletEmp?id=003">Delete</a></td>
</tr>
</tbody>
</table>
</center>
</body>



你可能感兴趣的:(JavaScript 基础操作总结(二))