使用JS编写的一个实例程序


<html>
<head>
<title>Table Sort Example</title>
<script type="text/javascript">
window.onload = function(){

var oTable = document.getElementById("tblSort");
var oTBody = oTable.tBodies[0];
var colDataRows = oTBody.rows;
for(i = 0; i < colDataRows.length; i++){
colDataRows[i].lastChild.innerHTML = "0";
}

var inputv = document.getElementsByTagName("input");
for(i = 0; i < inputv.length; i++){
inputv[i].value = 0;
inputv[i].onchange = function(){
var trnode = this.parentNode.parentNode;
add1 = trnode.childNodes[2].firstChild.value;
add2 = trnode.childNodes[3].firstChild.value;
add3 = trnode.childNodes[5].innerHTML;
trnode.childNodes[4].innerHTML = parseFloat(add1) + parseFloat(add2);
trnode.childNodes[6].innerHTML = parseFloat(add1) + parseFloat(add2) + parseFloat(add3);
sortTable('tblSort', 6, 'float');

}
}



}


//转换器,将列的字段类型转换为可以排序的类型:String,int,float
function convert(sValue, sDataType) {
switch(sDataType) {
case "int":
return parseInt(sValue);
case "float":
return parseFloat(sValue);
case "date":
return new Date(Date.parse(sValue));
default:
return sValue.toString();

}
}

//排序函数产生器,iCol表示列索引,sDataType表示该列的数据类型
function generateCompareTRs(iCol, sDataType) {

return function compareTRs(oTR1, oTR2) {

var vValue1 = convert(oTR1.cells[iCol].firstChild.nodeValue, sDataType);
var vValue2 = convert(oTR2.cells[iCol].firstChild.nodeValue, sDataType);
if (vValue1 > vValue2) {
return -1;
} else if (vValue1 < vValue2) {
return 1;
} else {
return 0;
}
};
}

//排序方法
function sortTable(sTableID, iCol, sDataType) {
var oTable = document.getElementById(sTableID);
var oTBody = oTable.tBodies[0];
var colDataRows = oTBody.rows;
var aTRs = new Array;

//将所有列放入数组
for (var i=0; i < colDataRows.length; i++) {
aTRs[i] = colDataRows[i];
}

//判断最后一次排序的列是否与现在要进行排序的列相同,是的话,直接使用reverse()逆序

//使用数组的sort方法,传进排序函数
aTRs.sort(generateCompareTRs(iCol, sDataType));


var oFragment = document.createDocumentFragment();
for (var i=0; i < aTRs.length; i++) {
aTRs[i].firstChild.innerHTML = i + 1;
oFragment.appendChild(aTRs[i]);
}

oTBody.appendChild(oFragment);
//记录最后一次排序的列索引
oTable.sortCol = iCol;
}

</script>
</head>
<body>
<p>Click on the table header to sort in ascending order.</p>
<table border="1" id="tblSort">
<thead>
<tr align="center">
<td width="60"> 序号</td>
<td width="168">人名</td>
<td width="168">输入a</td>
<td width="168">输入b</td>
<td width="100">a+b</td>
<td width="80">c</td>
<td width="184">a + b + c</td>
</tr>
</thead>
<tbody>
<tr>
<td> 1</td>
<td> 张三</td>
<td><input type="text" name="textfield" id="a1" ></td>
<td><input type="text" name="textfield" id="b1"></td>
<td> </td>
<td>10</td>
<td> </td>
</tr>
<tr>
<td> 2</td>
<td> 李四</td>
<td><input type="text" name="textfield" id="a2" ></td>
<td><input type="text" name="textfield" id="b2"></td>
<td> </td>
<td>19</td>
<td> </td>
</tr>
<tr>
<td> 3</td>
<td> 王五</td>
<td><input type="text" name="textfield" id="a3" ></td>
<td><input type="text" name="textfield" id="b3"></td>
<td> </td>
<td>12</td>
<td> </td>
</tr>
<tr>
<td> 4</td>
<td> 周六</td>
<td><input type="text" name="textfield" id="a4" ></td>
<td><input type="text" name="textfield" id="b4"></td>
<td> </td>
<td>30</td>
<td> </td>
</tr>
<tr>
<td> 5</td>
<td> 韩老三</td>
<td><input type="text" name="textfield" id="a5" ></td>
<td><input type="text" name="textfield" id="b5"></td>
<td> </td>
<td>5</td>
<td> </td>
</tr>
<tr>
<td> 6</td>
<td> 聂红红</td>
<td><input type="text" name="textfield" id="a1" ></td>
<td><input type="text" name="textfield" id="b1"></td>
<td> </td>
<td>24</td>
<td> </td>
</tr>
</tbody>
</table>
</body>
</html>


单例模式是一种常用的设计模式,它可以保证一个类只有一个实例,并提供一个全局的访问点。在JavaScript中,可以使用闭包来实现单例模式。下面是一个简单的示例: ```javascript var Singleton = (function() { var instance; function createInstance() { var object = new Object("I am the instance"); return object; } return { getInstance: function() { if (!instance) { instance = createInstance(); } return instance; } }; })(); // 使用示例 var instance1 = Singleton.getInstance(); var instance2 = Singleton.getInstance(); console.log(instance1 === instance2); // true ``` 在这个示例中,我们使用一个立即执行函数来创建Singleton对象。由于函数内部定义的变量在函数外部是不可访问的,因此利用闭包来保存Singleton对象的实例。getInstance方法用来获取Singleton对象的实例,如果instance变量不存在则创建一个新的对象并将其赋值给instance变量,否则直接返回instance变量。这样就可以保证Singleton对象只有一个实例使用示例中,我们连续两次调用getInstance方法获取Singleton对象的实例,然后比较它们是否相等,结果为true,说明Singleton对象只有一个实例。 需要注意的是,由于JavaScript是一门动态语言,所以单例模式并不能完全避免创建多个实例的情况。如果在程序使用了new操作符来创建Singleton对象的实例,那么就会创建一个新的对象,而不是返回已有的实例。因此在编写程序时需要注意不要使用new操作符来创建Singleton对象的实例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值