js 对 select 中的 option 进行中文排序问题

从数据库中读取出 select 列表的 option 值是按照数据库中的顺序进行排列的,有时需要对 optiion 的中文按照字母序进行排序,这时需要注意的问题是  option 的 text 值 和 value 值要同时排序。这样提交 form 表单将数据提交到数据库时就能按照 正确的 value 值进行插入数据了。

下面是一个写好的  sortOptions(oSel) 对 option进行排序的函数, oSel 为 select 的名字。


var select = document.getElementById('select') ;

 
select_root.options.length = 0 ;		// 长度清零
			
// 添加 " --市-- "
var cityOption = document.createElement("option") ;
cityOption.innerText = "--市--" ;		
select_root.appendChild(cityOption) ;
			
for(var i = 0; i < xSel.length; i ++) {
<span style="white-space:pre">	</span>var xValue = xSel[i].childNodes[0].firstChild.nodeValue;  
	var xText = xSel[i].childNodes[1].firstChild.nodeValue ;
				
	var option = new Option(xText, xValue) ;
				
	try{
		select_root.add(option) ;
	}catch(e){}
}
			
// 排序
sortOptions(select_root) ;

function sortOptions(oSel) {
	var ln = oSel.options.length ;
	var txt = new Array() ;
	var val = new Array() ;
	
	for(var i = 0; i < ln; i ++) {
		txt[i] = oSel.options[i].text ;
		val[i] = oSel.options[i].value ;
	}
	
	toSort(txt, val) ;
	
	oSel.options.length = 0 ;
	
	for(var i = 0; i < txt.length; i ++) {
		oSel.add(new Option(txt[i], val[i])) ;
	}
	
}

function toSort(txt, val) {
	var j, k, temp ;
	for(var i = 1; i < txt.length-1; i ++) {
		k = i ;
		for(var j = i+1; j < txt.length; j ++ ) 
			if( txt[k].localeCompare(txt[j]) == 1 ){
				k = j ;
			}
		temp = txt[k] ;
		txt[k] = txt[i] ;
		txt[i] = temp ;
		
		temp = val[k] ;
		val[k] = val[i] ;
		val[i] = temp ;
		
	}
}



你可能感兴趣的:(js,jsp)