PageSourceSearch

https://www.light-am.com/style/web/js/public/rhhz.js?t=1790220335056

js light-am.com collected 2026-09-24 20:46:42 UTC 13,827 bytes, 379 lines download raw bytes

1/**
2 * rhhz.js ---仁和软件前端插件js集合
3 * tools{
4 * 	subTextMax:文本内容按长度设置截取,
5 * 	menuView:按照页面设置进行页面菜单对应高亮
6 * }
7 * function{
8 * 	hasChinese:判断当前对象中是否包含中文字符,
9 * 	trim:解决IE 对jquery Trim方法的兼容性,
10 * 	startWith:判断当前对象是否以字符开始,
11 * 	endWith:判断字符串是否以字符结束,
12 *  getFileUrl:获取本地资源文件的路径,
13 *  preImg:预览本地图片,
14 *  getUrlParam:获取URL参数列表,
15 *  getRefSupIndex:获取参考文献引用索引,
16 *  isNull:判断对象是否为空,
17 *  formatDateToEn:将日期转换成英文格式 2016-1-1 --> 01 Jan 2016
18 *  GetRandomNum:获取随机数
19 *  dateStr:获取网页顶部显示需要的日期信息 参数,type 1:中文  2英文 3英文简写 ( 2017-1-11 星期三;  Wednesday, 11 January, 2017 ;Jan 20th, Wednesday
20 * 	shareTools(type,obj):分享工具,qzone,sina,weixin,renren,google+,facebook,linkedin,twitter
21 * }
22 * 
23 * @version     v1.0
24 * @date 		2016-09-30
25 */
26
27+function ($) {
28	//设置字符串截取默认参数
29	var subTextDefaluts = {
30		add_title:true,      //默认截取后设置全内容title
31        trim:true,//默认截取后去除首尾空及换行,感觉没啥用,后面考虑取消
32        content_type:'html',//默认处理内容为html标签,如设置为text会清除原有标签
33        keep_len:10//默认截取保留10个字符,建议采用配置方式或者在标签中设置
34	};
35	
36	//设置菜单高亮默认参数
37	var menuDefaults = {
38		defaultPage:'index',			//默认获取不到页面索引,设置为首页
39		pageViewId:'pageViewId',		//页面索引取值ID
40		hightLightTag:'li',				//需要设置高亮的标签
41		highLightClass:'current',		//当前页选中高亮class
42		pageRelAttr:'rel_page',			//菜单列表中索引属性标识
43		pageRelTag:'li span'			//菜单列表中索引取值标签,默认取text().trim(),pageRelTag和pageRelAttr不需要同时存在
44	}
45	
46	$.fn.subTextMax = function(options) {
47		var opts = $.extend({}, subTextDefaluts, options); 
48		return this.each(function(){
49		var keepindex = parseInt($(this).attr("keep_len") == undefined ? opts.keep_len : $(this).attr("keep_len"));//超出keep值需要截取
50		var contentHtml = $(this).html().replace(/&nbsp;/ig, '').replace(/\s+/g, ' ').replace(/\t|\r|\n/g,"").replace('<sec> <b>','<sec><b>').replace(/<br[ ]*[/]{0,1}>/g,"<br/>").trim();
51		//var contentText = $(this).text().replace(/&nbsp;/ig, '').replace(/\s+/g, ' ').replace(/\t|\r|\n/g,"").trim();
52		var contentText = filterHTMLTag(contentHtml);
53		
54		if(contentText.length > keepindex){
55	       //如果需要,可加title,title为全部文本内容
56		   if(opts.add_title){
57			   if($(this).attr("title")==''||$(this).attr("title") == undefined){
58				   $(this).attr("title",contentText);
59		      }
60		    }
61		    contentText = contentText.substr(0,keepindex);
62		    if(opts.content_type == 'text'){
63		        $(this).html(contentText + "...");
64		    }else{
65		        //对HTML标签内容进行截取分为四个步骤1存储原有标签  2按照text进行截取  3对截取后的text进行标签插入  4补全未闭合标签
66		        //1.处理原有标签
67		        //获取当前内容中的各个标签及所在位置
68		        var rgx = /<[^<^>]+>/; //标签匹配正则
69		        var index = 0;
70		        var tags = new Array();
71		        while(rgx.test(contentHtml)){
72		            var t = new Object();
73		            //标签出现的位置
74		            t.index = index + contentHtml.search(rgx);
75		            //标签内容
76		            t.tag = contentHtml.match(rgx).toString();
77		            //每次匹配第一个标签,匹配完删除此标签,同时索引位置加当前标签的长度
78		            var len = contentHtml.search(/<[^<^>]+>/) + contentHtml.match(/<[^<^>]+>/)[0].length;
79		            contentHtml = contentHtml.substr(len);
80		            index += len;
81		            tags.push(t);
82		        }
83		        //2.截取text内容,上面已经截取过了
84		        //3.填充原有标签
85		        if(tags.length > 0){
86		            $.each(tags,function(i,e){
87		                if(e.index > contentText.length){
88		                //如果当前节点的开始位置大于当前返回字符串的长度则不再继续判断
89		                tags = tags.slice(0,i);
90		                return false;
91		                }else{
92		                //将原有标签插入原位置
93		                contentText = contentText.substr(0,e.index) + e.tag + contentText.substr(e.index,contentText.length);
94		                }
95		            })
96		        }
97		        //4.闭合标签
98		        //获取未闭合标签,标签填充时不需要填充的标签都被slice过滤掉了,所以剩下的都是已经在内容中的标签了,需要进行判断闭合处理
99		        var insertTags = new Array();//已正确插入标签
100		        var uncloseTags = new Array();//未闭合标签
101		        if(tags.length > 0){
102		            $.each(tags,function(i,e){
103		            //先将所有插入的标签放到插入和未闭合列表中
104		            uncloseTags.push(e.tag);
105		            insertTags.push(e.tag);
106		            })
107		            $.each(insertTags,function(i,e){
108		                //自闭合标签不需要补全,删除如<br/>
109		                if(/<[^<^>^\/]+\/>/.test(e)){
110		                    uncloseTags.splice($.inArray(e,uncloseTags),1);
111		                    return true;
112		                }
113		                //对左标签进行闭合判断,如果同时存在一组左右标签,则同时删除即可,由于成组的删除,所以不用考虑多个<div>对应一个</div>的情况,我们只需要按照顺序获取到未闭合的列表即可
114		                if(/<[^<^>^\/]+>/.test(e)){
115		                    var tagClosed = "";
116		                       if(e.indexOf(" ") > 0){
117		                        tagClosed = "</" + e.substring(1, e.indexOf(" ")) + ">";
118		                    }else{
119		                        tagClosed = "</" + e.substring(1, e.length);
120		                    }
121		                    //同时存在闭合标签
122		                    if($.inArray(tagClosed,uncloseTags) != -1){
123		                        uncloseTags.splice($.inArray(e,uncloseTags),1);
124		                        uncloseTags.splice($.inArray(tagClosed,uncloseTags),1);
125		                       }
126		                }
127		            })
128		        }
129		        //此时uncloseTags已经是未闭合的标签列表了
130		        //生成闭合标签,根据标签嵌套规则,右标签和左标签对应,如<div><p>   --  </p></div>,所以先将未闭合标签数组逆序
131		        if(uncloseTags.length > 0){
132		            var closeTagStr = "";
133		            uncloseTags.reverse();
134		            $.each(uncloseTags,function(i,e){
135		                if(e.indexOf(" ") > 0){
136		                    closeTagStr += "</" + e.substring(1, e.indexOf(" ")) + ">";
137		                }else{
138		                    closeTagStr += "</" + e.substring(1, e.length);
139		                }
140		            })
141		            contentText += "..." + closeTagStr;
142		        }else{
143		            contentText += "...";
144		        }
145		        //拼接完成
146		        $(this).html(contentText);
147	       	}
148	        
149    		}
150	    })
151   }
152}(jQuery);
153
154/**
155 * 自定义字符串结尾判定方法,以s结尾返回true,否则返回false
156 * @param s
157 * @return
158 */
159String.prototype.endWith = function(s) {
160	if (s == null || s == "" || this.length == 0 || s.length > this.length)
161		return false;
162	if (this.substring(this.length - s.length) == s)
163		return true;
164	else
165		return false;
166	return true;
167}
168
169/**
170 * 自定义字符串开始判定方法,以s开始返回true,否则返回false
171 * @param s
172 * @return
173 */
174String.prototype.startWith = function(s) {
175	if (s == null || s == "" || this.length == 0 || s.length > this.length)
176		return false;
177	if (this.substr(0, s.length) == s)
178		return true;
179	else
180		return false;
181	return true;
182}
183
184/**
185 * IE浏览器兼容jquery trim方法
186 * @return
187 */
188String.prototype.trim=function(){
189  	return this.replace(/(^\s*)|(\s*$)/g, "");
190}
191/**
192 * 获取地址栏url参数
193 * @param name
194 * @return
195 */
196function getUrlParam(name){
197     var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
198     var r = window.location.search.substr(1).match(reg);
199     if(r!=null)return  unescape(r[2]); return null;
200	//return $("#language").val();
201}
202
203/**
204 * 从参考文献引用信息中提取参考文献索引
205 * 支持格式"[1,3,5-8,11,13-18,19]"
206 * @param refSup
207 * @return
208 */
209function getRefSupIndex(refSup){
210	if(!isNull(refSup)){
211		refSup = refSup.replace(/[\[|\]]/g, '').trim();
212		var chars = ['~','—','–',',','-','−','⁃'];
213		$.each(chars,function(ind,val){
214			var reg = new RegExp(val,"g");
215			refSup = refSup.replace(reg,'&');
216		});
217		var refIndexs = [] ;
218		$.each(refSup.split(","),function(i,e){
219			if(isNaN(e)){
220				var startEnd = e.split("&");
221				var start = parseInt(startEnd[0]);
222				var end = parseInt(startEnd[1]);
223				for(var i = start ; i <= end ; i++){
224					refIndexs.push(i);
225				}
226			}else{
227				refIndexs.push(e);
228			}
229		})
230		//alert(refIndexs);
231		return refIndexs;
232	}
233	return null;
234}
235
236/**
237 * 封装判断对象为空方法
238 * @param object
239 * @return
240 */
241function isNull(object){
242	return typeof(object) == "undefined" || object == null || object == ""; 
243}
244
245/**
246 * 获取随机数
247 * @param Min
248 * @param Max
249 * @return
250 */
251function GetRandomNum(Min,Max){   
252	var Range = Max - Min;   
253	var Rand = Math.random();   
254	return(Min + Math.round(Rand * Range));   
255} 
256
257/**
258 * 获取网页顶部显示需要的日期信息
259 * @param type 1:中文  2英文 3英文简写
260 * 	  2017-1-11 星期三
261 * 	  Wednesday, 11 January, 2017 
262 *    Jan 20th, Wednesday
263 * @return
264 */
265function dateStr(type){
266	var date = new Date();
267	return parseInt(type) == 1 ? 
268		formatDate(date,type) + " "+ getTodayWeek(type) : 
269		getTodayWeek(type) + ", " +formatDate(date,type)  ;
270}
271
272
273/**
274 * 将日期格式化成英文格式
275 * 2017-1-11
276 * 11 January, 2017
277 * Jan 11, 2017
278 * @param date
279 * */
280function formatDate(date,type){
281	if(!isNull(date)){
282		var dateStr = JSON.stringify(date).substring(1,11);
283		var dateVal = dateStr.split("-");
284		var month = dateVal[1];
285		if(month.charAt(0)== 0){month = month.charAt(1);}
286		var monthArray = new Array
287        ("January","February","March","April","May","June","July","August",
288        "September","October","November","December");
289		var monthArraySimple = new Array
290        ("Jan","Feb","Mar","Apr","May","June","July","Aug",
291        "Sep","Oct","Nov","Dec");
292        switch (type) { 
293		    case 1 : 
294	            return dateStr;
295		    case 2 : 
296		    	return dateVal[2]+" "+monthArray[month-1]+", "+dateVal[0];
297		    case 3 : 
298		    	return monthArraySimple[month-1]+" "+dateVal[2]+", "+dateVal[0];
299		}
300 	}
301}
302
303/**
304 * 获取星期几
305 * @param type 1:中文  2英文 3英文简写
306 * @return
307 */
308function getTodayWeek(type){
309	var chinese = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");  
310	var english = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");  
311	var englishSigle = new Array("Sun.","Mon.", "Tues.", "Wed.", "Thur.", "Fri.", "Sat.");  
312	var week = new Date().getDay(); 
313	switch (type) { 
314	    case 1 : 
315            return chinese[week];
316	    case 2 : 
317	    	return english[week];
318	    case 3 : 
319	    	return englishSigle[week];
320	}  
321}
322
323/**
324 * 分享工具方法
325 * @param type
326 * @return
327 */
328function shareTools(type,obj){
329	var url = window.location;
330	var title = $("title").text();
331	var description = $("meta[name='abstract']").attr("content") || $("meta[name='description']").attr("content") || $("meta[name='dc.description']").attr("content") || $("meta[http-equiv='description']").attr("content");
332	var shareUrl = "";
333	switch (type)
334	{
335		case 'qzone':
336			shareUrl = "http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url="+url+"&title="+title;
337			break;
338		case 'sina':
339			shareUrl = "http://service.weibo.com/share/share.php?title="+title+"&url="+url+"&pic=";
340			break;
341		case 'weixin':
342			shareUrl = local_host + "util/QrcodeServlet?url="+url;
343			break;
344		case 'renren':
345			shareUrl = "http://widget.renren.com/dialog/share?resourceUrl="+url+"&srcUrl="+url+"&title="+title+"&pic=&description="+description;
346			break;
347		case 'google+':
348			shareUrl = "https://plus.google.com/share?url="+url+"&t="+title;
349			break;
350		case 'facebook':
351			shareUrl = "http://www.facebook.com/sharer.php?s=100&p[title]="+title+"&p[summary]="+description+"&p[url]="+url+"&p[images]=";
352			break;
353		case 'linkedin':
354			shareUrl = "http://www.linkedin.com/shareArticle?armin=armin&ro=true&mini=true&url="+url+"&source=&title="+title+"&summary="+description;
355			break;
356		case 'twitter':
357			shareUrl = "https://twitter.com/intent/tweet?text="+title+"&url="+url;
358			break;
359		default:
360			shareUrl = "http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url="+url+"&title="+title;
361			break;
362	}
363	if("weixin" == type){
364		$(".weixinQrcode").attr("src",shareUrl);
365	}else{
366		window.open(shareUrl, "_blank");
367	}
368}
369function closeWeiXinBox(obj){
370	$(obj).parent().hide();
371}
372
373//过滤HTML标签
374function filterHTMLTag(str) {
375    var msg = str.replace(/<\/?[^>]*>/g, ''); //去除HTML Tag
376    msg = msg.replace(/[|]*\n/, ''); //去除行尾空格
377    msg = msg.replace(/&nbsp;/ig, ''); //去掉npsp
378    return msg;
379}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.