`
jsczxy2
  • 浏览: 1275362 次
  • 性别: Icon_minigender_1
  • 来自: 常州
文章分类
社区版块
存档分类
最新评论

[转]扩展js基础类的方法

阅读更多
	/**
		 * 扩展基础类
		 * 得到字符串的长度,包括中文和英文
		 **/
		String.prototype.charlen = function() {
			var arr = this.match(/[^\x00-\xff]/ig);
			return this.length + (arr == null ? 0 : arr.length);
		}

		/**
		 * 扩展基础类
		 * 格式化字符串${0} -> 参考printf %s
		 **/
		String.prototype.format = function() {
			var args = arguments;
			return this.replace(/\$\{(\d+)\}/g,              
				function(m, i){
					return args[i];
				});
		} 

		/**
		 * 扩展基础类
		 * 字符串首尾去空格
		 **/
		String.prototype.trim = function() {
			return this.replace(/(^\s*)|(\s*$)/g, "");
		}

		/**
		 * 扩展基础类
		 * 字符串包含字符串判断
		 **/
		String.prototype.contains = function(sub) {
			return this.indexOf(sub) != -1;
		}

		/**
		 * 扩展基础类
		 * 字符串比较大小
		 **/
		String.prototype.compare = function(b) {
			if(!b)
				return -1;

			if(this.length != b.length)
				return this.length - b.length;

			var i = 0;
			for (; i < this.length; i++){
				var val = this.charCodeAt(i) - b.charCodeAt(i);
				if(val != 0)
					return val;
			}

			return 0;
		}

		/**
		 * 扩展基础类
		 * 替换字符
		 **/
		String.prototype.replaceLen = function(start, len, replaced) {
			if(!len)
				return this;

			if(start >= this.length)
				return this;

			var returnSeg = '';
			var returnSeg2 = '';
			var i = 0;
			for (; i < this.length; i++){
				var c = this.charAt(i);
				if(i < start)
					returnSeg += c;

				if(i >= start + len)
					returnSeg2 += c;
			}

			return returnSeg + replaced + returnSeg2;
		}

		/**
		 * 扩展基础类
		 * 替换字符,这个在替换填入比较有用,比如***天***小时 替换为 <input />天<input />小时
		 **/
		String.prototype.replaceChar = function(target, replaced, start) {
			if(!target)
				return this;

			if(!start)
				start = 0;

			var returnVal = this.substring(0, start);
			var index = 0;
			for (var i = start; i < this.length; i++) {
				var c = this.charAt(i);
				target = typeof target == 'function' ? target.call(this, index) : target;
				if (c == target) {
					returnVal += typeof replaced == 'function' ? replaced.call(this, index) : replaced;
					while (i < this.length - 1 && this.charAt(i + 1) == c) {
						i++;
					}
					index++;
				}else{
					returnVal += c;
				}
			}

			return returnVal;
		}

		/**
		 * 扩展基础类
		 * 克隆复制(简单copy而已)
		 **/
		Array.prototype.clone = function(){
			var arr = [];
			var i = 0;
			for(; i < this.length; i++){
				switch(typeof this[i]){
					case 'object':
						var obj = {};
						for(key in this[i])
							obj[key] = this[i][key];
						arr.push(obj);
						break;
					default:
						arr.push(this[i]);
						break;
				}
			}
			return arr;
		}

		/**
		 * 扩展基础类
		 * 清空
		 **/
		Array.prototype.clear = function() {
			this.splice(0, this.length);
		}

		/**
		 * 扩展基础类
		 * 数组包含元素
		 **/
		Array.prototype.contains = function(el) {
			var i;
			for(i = 0; i < this.length; i++) {  
				if(this[i] == el)  
					return true;  
			}  
			return false;  
		}

		/**
		 * 扩展基础类
		 * 数组添加数组
		 **/
		Array.prototype.merge = function(arr) {
			if(arr){
				var i;
				for(i = 0; i < arr.length; i++) {  
					this.push(arr[i]);
				}  
			}
		}

		/**
		 * 扩展基础类
		 * 根据值和属性获取到数组的对象下标
		 **/
		Array.prototype.indexOf = function(val, field){
			var i = 0;
			for(; i < this.length; i++){
				if(this[i] && (field ? this[i][field] == val : this[i] == val)){
					return i;
				}
			}
			return -1;
		}

		/**
		 * 扩展基础类
		 * 最后一个下标
		 **/
		Array.prototype.lastIndexOf = function(val, field){
			var i = 0;
			var max = -1;
			for(; i < this.length; i++){
				if(this[i] && (field ? this[i][field] == val : this[i] == val)){
					max = i;
				}
			}
			return max;
		}

		/**
		 * 扩展基础类
		 * 数组唯一
		 **/
		Array.prototype.unique = function(field){
			var arr = [];

			var i = 0;
			for(; i < this.length; i++){
				var val = field ? this[i][field] : this[i];
				var index = this.lastIndexOf(val, field);
				if(index == i)
					arr.push(this[i]);
			}

			return arr;
		}

		/**
		 * 扩展基础类
		 * 数组最大值
		 **/
		Array.prototype.max = function(field){
			var result = -1;

			var i = 0;
			for(; i < this.length; i++){
				var val = field ? this[i][field] : this[i];
				if(val > result)
					result = val;
			}

			return result;
		}

		/**
		 * 扩展基础类
		 * 数组最小值
		 **/
		Array.prototype.min = function(field){
			var result = -1;

			var i = 0;
			for(; i < this.length; i++){
				var val = field ? this[i][field] : this[i];
				if(val < result)
					result = val;
			}

			return result;
		}

		/**
		 * 扩展基础类
		 * 日期格式化
		 **/
		Date.prototype.format = function(pat){
			var year = this.getFullYear();
			var month = this.getMonth() + 1;
			var day = this.getDate();
			var hour = this.getHours();
			var minute = this.getMinutes();
			var second = this.getSeconds();
			// 两位补齐
			month = month > 9 ? month : "0" + month;
			day = day > 9 ? day : "0" + day;
			hour = hour > 9 ? hour : "0" + hour;
			minute = minute > 9 ? minute : "0" + minute;
			second = second > 9 ? second : "0" + second;
			if(!pat){
				pat = "yyyy-MM-dd";
			}
			pat = pat.replace(/yyyy/g, year);
			pat = pat.replace(/MM/g, month);
			pat = pat.replace(/dd/g, day);
			pat = pat.replace(/HH/gi, hour);
			pat = pat.replace(/mm/g, minute);
			pat = pat.replace(/ss/g, second);
			return pat;
		}

		// 减去时差的毫秒数(取决于使用的浏览器的locale设置)
		Date.prototype.getTime2 = function(){
//			return this.getTime();
			return this.getTime() - this.getTimezoneOffset() / 60 * 3600 * 1000;
		}

		// 日期相差天数
		Date.prototype.diff = function(date){
			return Math.ceil((this - date) / (1000 * 60 * 60 * 24));
		}

		// 日期加减计算
		Date.prototype.add = function(days){
			return new Date(this.getTime() + days * (1000 * 60 * 60 * 24));
		}

		// 日期加减计算
		Date.prototype.addMonth = function(months){
			var day = this.getDate();
			var month = this.getMonth() + 1;
			var year = this.getFullYear();
			month += months;  
			if(month > 12){
				year += Math.floor(month / 12);
				month = month % 12;
			}
			return Date.parse(month + '/' + day + '/' + year);
		}

		// 解析字符串,以默认 pat = "yyyy-MM-dd"的格式,而不是MM/dd/yyyy
		Date.parse2 = function(str, pat){
			if(str == null || str == '')
				return new Date();
			var rstr = str.replace(/(\d{4})([-\./])(\d{1,2})\2(\d{1,2})/, "$3/$4/$1");
			return new Date(Date.parse(rstr));
		}

		// 解析字符串,json date obj
		// 减去时差的毫秒数(取决于使用的浏览器的locale设置)
		Date.parse3 = function(obj){
//			return new Date(obj.time);
			return new Date(obj.time - new Date().getTimezoneOffset() / 60 * 3600 * 1000);
//			var str = obj.year + '-' + (obj.month + 1) + '-' + obj.date + ' ' + 
//				obj.hours + ':' + obj.minutes + ':' + obj.seconds;
//			return Date.parse2(str);
		}

 

分享到:
评论

相关推荐

    扩展JavaScript基础类的方法

    一次在Iteye上面看到的一个帖子觉得写得非常好,就复制下来,本来留到自己以后慢慢用,我想很多朋友应该也需要的,就传上来分享一下

    js扩展基础类

    ### js扩展基础类知识点 #### 一、字符串长度计算(charlen) 在JavaScript中,标准的`String`对象并...综上所述,这些扩展的基础类方法极大地方便了开发者在处理字符串和数组时的操作,提高了代码的可读性和复用性。

    JS扩展类,克隆对象与混合类实例分析

    扩展类就是指在现有的类基础上增加新的方法或者属性,以创建一个功能更加丰富的子类。在给定的内容中,通过自定义的“extend”函数来实现类的扩展。这个“extend”函数接收两个参数:子类构造函数“subClass”和父类...

    WebKit中JsCore的扩展方法.pdf

    每个JavaScript对象都有一个与之关联的Object源文件,这些文件包含了Value类,它是JavaScript解释器和Object之间交换数据的基础。 当需要扩展JavaScript的功能,如添加本地方法调用,就需要对JsCore进行扩展。扩展...

    实验3扩展JavaScript框架应用.pdf

    实验3主要目标是让学生掌握JavaScript框架的扩展应用,特别是针对EasyUI的使用,以及JQuery方法和JSON格式数据的处理。实验内容涉及Java的JDBC访问数据库,EasyUI组件如ComboBox和DataGrid的运用,以及JSON与Java...

    js实现prototype扩展的方法(字符串,日期,数组扩展)

    在JavaScript中,prototype扩展是一种常见的方法,用于向内置对象(如String、Date和Array)添加新的功能或修改已有功能。这种扩展技术可以帮助我们更高效地处理数据,提高代码的可读性和可维护性。以下是对标题和...

    正则表达式扩展类

    1. **扩展方法**:C#允许通过静态类和扩展方法实现对现有类型的功能扩展。例如,可以创建一个名为`RegexExtensions`的静态类,包含上述的扩展方法,使`Regex`类的功能更加强大。 2. **泛型支持**:考虑将扩展方法...

    毕设&课设&项目&实训-javascript基础类库以及基于jquery的组件库.zip

    在这个"毕设&课设&项目&实训-javascript基础类库以及基于jquery的组件库.zip"压缩包中,你将找到关于JavaScript基础知识和jQuery组件库的学习资料,这对于进行项目实践、课程设计或者毕业设计非常有帮助。...

    android中js对象C层扩展步骤说明及源码

    扩展JS对象的主要目的是创建一个可以在JavaScript中调用的原生对象,这可以通过定义C++类并将其注册到JavaScript环境中实现。 步骤一:创建C++类 在Android项目中,创建一个新的C++源码文件,例如`MyJsObject.cpp`...

    JS实现URL编码转换中文

    通过了解URL编码的基础知识以及使用JavaScript内置函数的具体操作方法,可以帮助开发者更好地处理Web应用中的中文字符问题。此外,还讨论了处理更多特殊字符的情况,这对于国际化应用程序来说尤为重要。掌握这些技巧...

    SuperSlide2.1.20个基础效果和72个扩展效果

    这款插件提供了基础效果和扩展效果,旨在帮助设计师和开发者创建出引人注目的滑动展示效果,提升网站的用户体验。 ### 基础效果 SuperSlide2.1的基础效果涵盖了20种基本的滑动动画,这些效果通常包括但不限于: 1...

    JavaScript基础与实践教程

    二、JavaScript基础语法 1. 变量:JavaScript中的变量使用var、let或const关键字声明。var适用于全局或函数作用域,let和const则属于块级作用域。const声明的变量不可重新赋值,但其引用的对象属性仍可修改。 2. ...

    Nestjs基础到实战.pdf

    NestJS 是一个基于 TypeScript 的框架,用于构建高效、可扩展的 Node.js 服务端应用。它融合了面向对象编程(OOP)、函数式编程(FP)和函数式响应式编程(FRP)的设计理念,并受到 Angular 和 Spring 框架的影响,...

    chromium浏览器集成JS扩展指南_4.docx

    ### Chromium浏览器集成JS...这种方法不仅适用于`NGBFileManager`,还可以扩展到其他类似的C++与JavaScript之间的交互场景。这种方式极大地扩展了Chromium浏览器的功能边界,并为开发人员提供了更多的灵活性和可能性。

    asp.net中javascript通用类

    不过,随着技术的发展,现代Web开发中更多地倾向于使用库和框架(如jQuery、React、Vue等),它们提供了更高级别的抽象和封装,但掌握JavaScript基础和如何在ASP.NET中有效利用JavaScript仍然是每个Web开发者必备的...

    raphael.js扩展的拖拽功能,raphael.draggable.js,raphael.extension.js

    在SVG和VML图形库的世界里,Raphael.js是一个非常受欢迎的JavaScript库,它使得在网页上创建和操作矢量图形变得极其简单。Raphael.js不仅支持多种浏览器,包括那些不支持HTML5 canvas的老旧浏览器,而且提供了一套...

    EXT组件的7WX扩展类

    4. **JavaScript编程**:7WX-ext.js文件很可能是实现7WX扩展类的源代码。通过阅读和理解这个文件,开发者可以深入学习如何使用JavaScript进行组件扩展,以及如何处理和解析特定数据格式。 5. **数据驱动的UI**:EXT...

    javascript div弹出窗口 可封装为JS类

    总结来说,"javascript div弹出窗口 可封装为JS类"这个主题涉及到了JavaScript基础、HTML DOM操作、CSS样式设计以及模块化编程思想。通过封装`div`弹窗为JS类,我们可以创建一个灵活、可维护的弹窗系统,便于在各种...

    一个JS类(收藏)

    Prototype.js是一个广泛使用的JavaScript库,它为JavaScript提供了许多面向对象编程的特性,包括类式继承、构造函数以及模拟类的方法。本篇文章将深入探讨Prototype.js的核心思想,以及JavaScript的原型机制。 首先...

    JavaScript语言基础知识点总结十张图

    ES6提供了新的数组方法(如`map`、`filter`、`reduce`)和对象语法(如解构赋值、扩展运算符)。 6. **原型与继承** JavaScript的继承机制基于原型链,每个对象都有一个`__proto__`属性,指向创建它的构造函数的...

Global site tag (gtag.js) - Google Analytics