替换节点及replaceEach方法

需求: 为所有的 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);

//克隆 aNode 的同时, 把 onclick 事件也复制.
aNode2.onclick = aNode.onclick;

//克隆 aNode 的同时, 把 onclick 事件也复制.
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++){
//手动为每个 li 节点添加一个 index 属性
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]);

}
}

}

<p>你喜欢哪个城市?</p>

<ul id="city">
<li id="bj">北京</li>
<li>上海</li>
<li>东京</li>
<li>首尔</li>
</ul>

<br><br>
<p>你喜欢哪款单机游戏?</p>
<ul id="game">
<li id="rl">红警</li>
<li>实况</li>
<li>极品飞车</li>
<li>魔兽</li>
</ul>

时间: 2024-08-08 17:53:38

替换节点及replaceEach方法的相关文章

JavaScript之DOM-5 增加、删除和替换节点(创建节点、插入节点、删除和替换节点)

一.创建节点 创建元素 - 使用如下方法可以创建一个新的元素节点: - document.createElement('元素名'); 创建文本节点 - 使用如下方法可以创建一个新的元素节点: - document.createTextNode('text'); 创建注释 - 使用如下方法可以创建一个HTML注释节点: - document.createComment('comment'); 创建文档片段 - 使用如下方法可以创建一个文档片段: - document.createDocumentF

替换节点

1.单点替换程序 这种效果可以看出,虽然被替换了,但是下面节点也没移动了. 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Insert title here</title> 6 <script type="text/javascript"> 7 window.onload=function(

Unit03: 增加、删除和替换节点 、 常用 HTML DOM 对象

[创建和删除节点] 1.如何创建节点:(创建元素节点)3步: 1.先创建空元素对象: var newElem=document.createElement("标签名"); 2.设置必要属性: newElem.属性名="值"; newElem.innerHTML="文本"; 3.将新元素对象挂载到指定父元素下: - 追加:parent.appendChild(newElem); ***只有向已经存在页面中的元素追加新节点才会渲染: - 插入:par

替换节点(replaceChild())

replaceChild():方法将把一个给定父元素里面的一个子节点替换为另一个子节点: referencre = element.replaceChild(newChild,oldChild); oldChild节点必须是element元素子节点,他的返回值是一个指向已经被替换的那个子节点的引用指针. 在下例中,id属性值是content的元素还包含着一个id属性值是fineprint的元素,我们将用createElement()方法创建一个新的文本元素,再用replaceChild()方法把

JavaScript DOM编程 学习笔记-替换节点

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script type="text/javascript"> window.onload = function() { //测试replaceChild()方法 var bjNode = d

复杂网络节点重要性评价方法初探

在一个网络中,不同的节点起着大小不同的作用.以社交网络为例,有意见领袖的大V,有死寂沉沉的僵尸粉:以交通网络为例,有至关重要的交通枢纽,有无关痛痒的备用中转站.在使用复杂网络分析业务问题时,如何区分网络中不同节点的重要性程度,就是一个需要考虑的问题.为了解决我们自己的业务问题,顺便了解了一下相关的方法,特记录一下,若有益于相关领域的同学,则幸甚. 一.要实现的目标 对网络中的节点定义一个指标,可用来定量地衡量每个节点在网络中重要性的大小. 二.相关的一些方法总结 分析节点的重要性,业界较多地从网

WPF TreeView 选择事件执行两次,获取TreeView的父节点的解决方法

1.TreeView选择事件执行两次 Very often, we need to execute some code in SelectedItemChanged depending on the selected TreeViewItem. ButSelectedItemChanged is called twice. This is due to stealing focus from the main window, which is screwing something up. Wha

克隆节点,替换节点

1.克隆节点介绍 2.替换节点 注意点:替换后的事件将不会存在 3.程序(克隆) <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="jquery-3.2.1.min.js">

获取所有节点的一些方法的属性(有待改善)

<!DOCTYPE html><html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <title>小狗</title> <script type="text\javascript"> window.onload=function(){ //获取city节点的