js xml实现全国地区级联(Firefox IE Chrome)

本文介绍了一种基于HTML和JavaScript的级联选择器组件实现方法,包括如何处理浏览器兼容性问题,通过AJAX加载XML数据,并利用DOM操作实现省市区三级联动效果。

先上效果图,可以做这样子的界面。当你还没选择省的时候是这样子的界面

如果选择的话,界面如下:

想不想拥有这样子的效果呢?不好意思,我好像植入广告了。

那么我们先写下HTML代码,这个是我们这个组件渲染的地方。如果这个组件比作是我们这些人的话,那么下面的代码就是我们的家,对不起,我想家了。

<div id='cascade'></div>
下面就是最重要的javascript代码了,我觉得我是用面向对象的写法写的,但不知是不是伪面向对象的。

我先创建一个对象先,其实这个是命名空间。

Mkey = {};
然后因为我们要处理浏览器兼容性的问题,应该当你的浏览器加载你的页面的时候就要去检测当前的用户代理是哪种。我的处理如下:

Mkey.browser = function() {
	// 用户代理,即浏览器的版本
	var ua = navigator.userAgent.toLowerCase();
	var checkNav = function(reg) {
		return reg.test(ua);
	};
	return {
		isIE : checkNav(/msie/),
		isChrome : checkNav(/\bchrome\b/)
	}
}()
对于xml文件,我们可以用ajax去加载xml文件,所以我们再创建一个有关Ajax的方法如下:这个request最重要的是也是有关浏览器兼容的问题,ie总是来捣乱。

Mkey.Ajax = {};
Mkey.Ajax.requset = function(o) {
	this.url = o.url || "";
	var me = this;
	var ieAjax = function() {
		xmlDom = new ActiveXObject("Microsoft.XMLDOM");
		xmlDom.async = "false"; // false 使用同步加载数据
		xmlDom.load(me.url);
		return xmlDom;
	}, otherAjax = function() {
		var xmlDom, xmlhttp = new window.XMLHttpRequest();
		// false 使用同步加载数据
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState == 4) {// 4 = "loaded"
				if (xmlhttp.status == 200) {// 200 = OK
					o.success(xmlhttp.response);
				} else {
					alert("Problem retrieving XML data");
				}
			}
		};
		xmlhttp.open("GET", me.url, false);
		xmlhttp.send(null);
		xmlDom = xmlhttp.responseXML;
		return xmlDom;
	}
	return Mkey.browser.isIE ? ieAjax() : otherAjax();
};
我们可以用下面的代码获取xml ,然后用DOM来操作xml,声明下DOM不止可以用到HTML上面的。

var xmlDom = Mkey.Ajax.requset({
			url : 'cities.xml'
		});
做了很多辅助的工具后,这个就到我们的组件登场了。

Mkey.Cascade = function(config) {
	this.xmlDom = config.xmlDom;
	this.root = this.xmlDom.documentElement;
	this.cofp = {};
	// root 的孩子还是有点兼容性问题的 children or childNodes
	this.nodeChild = 'child' + this.childNamePostfix();
}
Mkey.Cascade.prototype = {
	render : function(ct) {
		var ct = document.getElementById(ct);
		this.onRender(ct);
		this.cities = document.getElementById('cities');
	},
	onRender : function(ct) {
		// 获取省份的结点,还有有关省份数组的长度
		var provinceArr = this.root[this.nodeChild], plen = provinceArr.length, me = this;
		this._dFragment = document.createDocumentFragment();
		ct.innerHTML = '<select id="province"><option>请选择省</option></select><select id="cities"><option>请选择相应省下面的市</option></select>';
		this.province = document.getElementById('province');
		for (var i = 0; i < plen; i++) {
			// 在chrome ie 的子节点有text结点和元素结点,所以要判断
			// 我们有34个省份,所以这个要循环34次
			if (this.isElementNode(provinceArr[i])) {
				var name = provinceArr[i].getAttribute("name");
				this.createOption(name, provinceArr[i]);
			}
		}
		this.province.onchange = function() {
			// 得到所选的province的名字
			var provinceName = me.obtainSelOptionName();
			me.cities.length = 1;
			var cit = me.cofp[provinceName];
			for (var i = 0; i < cit.length; i++) {
				if (me.isElementNode(cit[i])) {
					var name = cit[i].firstChild.nodeValue;
					me.createOption(name);
				}
			}
			me.cities.appendChild(me._dFragment);
		};
		this.province.appendChild(this._dFragment);
	},
	createOption : function(name, province) {
		var op = document.createElement("option");
		if (province)
			this.cofp[name] = province[this.nodeChild];
		op.appendChild(document.createTextNode(name));
		this._dFragment.appendChild(op);
	},
	obtainSelOptionName : function() {
		// 获取所选中的option
		return this.province[this.province.selectedIndex].innerHTML;
	},
	isTextNode : function(el) {
		return el.nodeType == 3 ? true : false;
	},
	isElementNode : function(el) {
		return el.nodeType == 1 ? true : false;
	},
	childNamePostfix : function() {
		return (Mkey.browser.isIE || Mkey.browser.isChrome) ? 'Nodes' : 'ren';
	}
};
new Mkey.Cascade({xmlDom:xmlDom}).render('cascade');
该数据集通过合成方式模拟了多种发动机在运行过程中的传感器监测数据,旨在构建一个用于机械系统故障检测的基准资源,特别适用于汽车领域的诊断分析。数据按固定时间间隔采集,涵盖了发动机性能指标、异常状态以及工作模式等多维度信息。 时间戳:数据类型为日期时间,记录了每个数据点的采集时刻。序列起始于2024年12月24日10:00,并以5分钟为间隔持续生成,体现了对发动机运行状态的连续监测。 温度(摄氏度):以浮点数形式记录发动机的温度读数。其数值范围通常处于60至120摄氏度之间,反映了发动机在常规工况下的典型温度区间。 转速(转/分钟):以浮点数表示发动机曲轴的旋转速度。该参数在1000至4000转/分钟的范围内随机生成,符合多数发动机在正常运转时的转速特征。 燃油效率(公里/升):浮点型变量,用于衡量发动机的燃料利用效能,即每升燃料所能支持的行驶里程。其取值范围设定在15至30公里/升之间。 振动_X、振动_Y、振动_Z:这三个浮点数列分别记录了发动机在三维空间坐标系中各轴向的振动强度。测量值标准化至0到1的标度,较高的数值通常暗示存在异常振动,可能与潜在的机械故障相关。 扭矩(牛·米):以浮点数表征发动机输出的旋转力矩,数值区间为50至200牛·米,体现了发动机的负载能力。 功率输出(千瓦):浮点型变量,描述发动机单位时间内做功的速率,取值范围为20至100千瓦。 故障状态:整型分类变量,用于标识发动机的异常程度,共分为四个等级:0代表正常状态,1表示轻微故障,2对应中等故障,3指示严重故障。该列作为分类任务的目标变量,支持基于传感器数据预测故障等级。 运行模式:字符串类型变量,描述发动机当前的工作状态,主要包括:怠速(发动机运转但无负载)、巡航(发动机在常规负载下平稳运行)、重载(发动机承受高负荷或高压工况)。 数据集整体包含1000条记录,每条记录对应特定时刻的发动机性能快照。其中故障状态涵盖从正常到严重故障的四级分类,有助于训练模型实现故障预测与诊断。所有数据均为合成生成,旨在模拟真实的发动机性能变化与典型故障场景,所包含的温度、转速、燃油效率、振动、扭矩及功率输出等关键传感指标,均为影响发动机故障判定的重要因素。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值