`

分享一段自己常用的扩展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);
		}

 

其中日期部分是为了和后台json-lib交互用,用了时间戳。

分享到:
评论
2 楼 hbxflihua 2012-08-31  
1 楼 mayEyeInfo 2011-12-22  

相关推荐

    js扩展基础类

    ### js扩展基础类知识点 #### 一、字符串长度计算(charlen) 在JavaScript中,标准的`String`对象并未提供直接获取包含中文字符在内的多字节字符长度的方法。本段代码通过扩展`String.prototype`实现了这一功能。...

    asp.net中javascript通用类

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

    JavaScript类的继承多种实现方法

    JavaScript 类的继承是面向对象编程中的重要概念,它允许创建一个新的类(子类),该类不仅具有自身定义的属性和方法,还能够继承一个现有类(父类)的属性和方法。在JavaScript ES6 中,引入了`class`语法来支持类...

    JavaScript基础笔记-尚硅谷视频自己总结

    ### JavaScript基础知识点总结 #### 一、语言概念与发展历程 - **语言定义**:计算机语言是一种人与计算机之间沟通的工具。人们通过编程语言来控制和操作计算机完成特定任务。 - **语言发展历史**: - **早期阶段...

    JS的一个时间段的特效

    【标题】"JS的一个时间段的...总的来说,"JS的一个时间段的特效"是一个结合了JavaScript基础、DOM操作、事件处理、日期时间管理、CSS样式和用户体验设计等多个方面知识的实践案例,对于提升前端开发技能非常有价值。

    MFC调用JS的WebPage类

    例如,WebPage类可能有一个`ExecuteJavaScript`方法,允许开发者传递一段JS代码并执行;还可能有一个`GetDocument`方法,返回网页的DOM(文档对象模型),以便于操作网页元素。 在提供的压缩包文件中,`WebPage.cpp...

    JavaScript 高级编程 基础入门pdf版.7z

    然而,随着Node.js的出现,JavaScript也扩展到服务器端开发,成为全栈开发的重要工具。因此,深入理解JavaScript的基础语法和高级特性,对于任何Web开发者来说都是至关重要的。 首先,基础入门阶段会涵盖JavaScript...

    php7 32位 v8dll 扩展库文件

    在这个例子中,我们创建了一个V8JavaScript对象实例,然后执行了一段简单的JavaScript代码。V8Js类提供了丰富的API,使得从PHP调用JavaScript函数、传递数据以及处理JavaScript返回的结果变得简单。 总结来说,...

    JavaScript基础学习-1

    1. JavaScript基础:学习ECMAScript的基本规则,这是JavaScript的核心语言部分。 2. ES6实战:了解并应用ES6引入的新特性,如箭头函数、类、模板字符串等。 3. 面向对象编程:理解面向对象的概念并学会在JavaScript...

    adobe air3.1本机扩展开发的中文开发手手册

    综上所述,Adobe AIR 3.1 的本机扩展开发涵盖了从基础概念到具体实现的全过程,通过灵活地利用ActionScript与本机代码的结合,开发者可以构建出功能强大且性能优异的应用程序。无论是C语言还是Java语言,都有详细的...

    JavaScript多线程的实现方法(gif).txt

    ### JavaScript多线程的实现方法 #### 背景与概念 在JavaScript中,传统的单线程模型限制了其在复杂应用中的性能表现。随着Web应用程序功能日益强大,多线程的支持变得越来越重要。虽然原生JavaScript是基于事件...

    react-一个包含常见Reactjs开代码片段的VSCodeeditor扩展

    React.js 是一个流行的JavaScript库,用于构建用户界面,特别是单页应用程序(SPA)。VS Code(Visual Studio Code)是一款由微软开发的免费、跨平台、源代码编辑器,它支持多种编程语言并拥有丰富的插件系统。这个...

    JsAndroid简单互调

    JavaScriptInterface是Android提供的一种机制,允许我们创建一个Java类,并标记为@JavascriptInterface,这样类中的方法就可以被JavaScript调用。这是安全的,因为只有标记了此注解的方法才能在WebView中执行,防止...

    JavaScript手册 JavaScript手册

    函数在JavaScript中扮演着重要角色,它是一段可重复使用的代码块。函数可以有参数,也可以返回值。ES6引入了箭头函数,其语法更加简洁。函数还有作用域的概念,包括全局作用域和局部作用域,以及ES6引入的块级作用域...

    React基础实用知识库分享

    React 基础实用知识库分享 React 基础知识库分享是 React 开发者的必备知识库,涵盖了 React 的基础知识点,从安装 React 到高级使用。以下是知识点总结: 安装 * 使用 npm 安装 Create React App:`npm install ...

    十张 Javascript 脑图

    最后,JavaScript也支持一些高级特性,如解构赋值、模板字符串、默认参数、剩余与扩展运算符、类(class)、Symbol等。随着ES版本的更新,新的语法特性和API不断引入,为开发者提供了更多便利。 综上所述,这十张JS...

    java面试题[基础类].doc

    【Java基础知识】 1. Java的基本数据类型包括整型(byte, short, int, long)、浮点型(float, double)、字符型(char)和布尔型(boolean)。String并不是基本数据类型,而是一个对象,它是类`java.lang.String`...

    prototype.js文件使用和讲解

    下面是一段使用`prototype.js`进行Ajax请求的示例: ```javascript new Ajax.Request('url/to/server', { method: 'post', parameters: {key: 'value'}, onSuccess: function(response) { console.log('成功...

    JavaScript_暴露自己.zip

    对象是键值对的集合,而类则是面向对象编程的基础,允许创建具有特定属性和方法的对象实例。 JavaScript的主要应用领域包括DOM(Document Object Model)操作,它可以改变HTML元素、属性和内容。AJAX(Asynchronous...

    JavaScript基础_java_zip_源码

    在"JavaScript基础_java_zip_源码"这个主题中,我们主要关注的是JavaScript的基本概念、语法以及如何通过 ZIP 文件处理相关的编程实践。 首先,JavaScript 基础包括变量、数据类型、操作符、控制流(条件语句和循环...

Global site tag (gtag.js) - Google Analytics