PageSourceSearch

http://dzkx.org/style/web/js/common/rhhz.js

js dzkx.org collected 2026-10-02 10:07:01 UTC 20,760 bytes, 516 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 *  copyToClipboard:一键复制,
16 *  getRefSupIndex:获取参考文献引用索引,
17 *  isNull:判断对象是否为空,
18 *  formatDateToEn:将日期转换成英文格式 2016-1-1 --> 01 Jan 2016
19 * }
20 *
21 * @version     v1.0
22 * @date 		2016-09-30
23 */
24
25+function ($) {
26    //设置字符串截取默认参数
27    var subTextDefaluts = {
28        add_title:true,      //默认截取后设置全内容title
29        trim:true,//默认截取后去除首尾空及换行,感觉没啥用,后面考虑取消
30        content_type:'html',//默认处理内容为html标签,如设置为text会清除原有标签
31        keep_len:10//默认截取保留10个字符,建议采用配置方式或者在标签中设置
32    };
33
34    //设置菜单高亮默认参数
35    var menuDefaults = {
36        defaultPage:'index',			//默认获取不到页面索引,设置为首页
37        pageViewId:'pageViewId',		//页面索引取值ID
38        hightLightTag:'li',				//需要设置高亮的标签
39        highLightClass:'current',		//当前页选中高亮class
40        pageRelAttr:'rel_page',			//菜单列表中索引属性标识
41        pageRelTag:'li span'			//菜单列表中索引取值标签,默认取text().trim(),pageRelTag和pageRelAttr不需要同时存在
42    }
43
44    $.fn.subTextMax = function(options) {
45        var opts = $.extend({}, subTextDefaluts, options);
46        return this.each(function(){
47            var keepindex = parseInt($(this).attr("keep_len") == undefined ? opts.keep_len : $(this).attr("keep_len"));//超出keep值需要截取
48            var contentHtml = $(this).html().replace(/\t|\r|\n/g,"").replace(/<br[ ]*[/]{0,1}>/g,"<br/>").trim();
49            var contentText = $(this).text().replace(/\t|\r|\n/g,"").trim();
50            if(contentText.length > keepindex){
51                //如果需要,可加title,title为全部文本内容
52                if(opts.add_title){
53                    if($(this).attr("title")==''||$(this).attr("title") == undefined){
54                        $(this).attr("title",contentText);
55                    }
56                }
57                contentText = contentText.substr(0,keepindex);
58                if(opts.content_type == 'text'){
59                    $(this).html(contentText + "...");
60                }else{
61                    //对HTML标签内容进行截取分为四个步骤1存储原有标签  2按照text进行截取  3对截取后的text进行标签插入  4补全未闭合标签
62                    //1.处理原有标签
63                    //获取当前内容中的各个标签及所在位置
64                    var rgx = /<[^<^>]+>/; //标签匹配正则
65                    var index = 0;
66                    var tags = new Array();
67                    while(rgx.test(contentHtml)){
68                        var t = new Object();
69                        //标签出现的位置
70                        t.index = index + contentHtml.search(rgx);
71                        //标签内容
72                        t.tag = contentHtml.match(rgx).toString();
73                        //每次匹配第一个标签,匹配完删除此标签,同时索引位置加当前标签的长度
74                        var len = contentHtml.search(/<[^<^>]+>/) + contentHtml.match(/<[^<^>]+>/)[0].length;
75                        contentHtml = contentHtml.substr(len);
76                        index += len;
77                        tags.push(t);
78                    }
79                    //2.截取text内容,上面已经截取过了
80                    //3.填充原有标签
81                    if(tags.length > 0){
82                        $.each(tags,function(i,e){
83                            if(e.index > contentText.length){
84                                //如果当前节点的开始位置大于当前返回字符串的长度则不再继续判断
85                                tags = tags.slice(0,i);
86                                return false;
87                            }else{
88                                //将原有标签插入原位置
89                                contentText = contentText.substr(0,e.index) + e.tag + contentText.substr(e.index,contentText.length);
90                            }
91                        })
92                    }
93                    //4.闭合标签
94                    //获取未闭合标签,标签填充时不需要填充的标签都被slice过滤掉了,所以剩下的都是已经在内容中的标签了,需要进行判断闭合处理
95                    var insertTags = new Array();//已正确插入标签
96                    var uncloseTags = new Array();//未闭合标签
97                    if(tags.length > 0){
98                        $.each(tags,function(i,e){
99                            //先将所有插入的标签放到插入和未闭合列表中
100                            uncloseTags.push(e.tag);
101                            insertTags.push(e.tag);
102                        })
103                        $.each(insertTags,function(i,e){
104                            //自闭合标签不需要补全,删除如<br/>
105                            if(/<[^<^>^\/]+\/>/.test(e)){
106                                uncloseTags.splice($.inArray(e,uncloseTags),1);
107                                return true;
108                            }
109                            //对左标签进行闭合判断,如果同时存在一组左右标签,则同时删除即可,由于成组的删除,所以不用考虑多个<div>对应一个</div>的情况,我们只需要按照顺序获取到未闭合的列表即可
110                            if(/<[^<^>^\/]+>/.test(e)){
111                                var tagClosed = "";
112                                if(e.indexOf(" ") > 0){
113                                    tagClosed = "</" + e.substring(1, e.indexOf(" ")) + ">";
114                                }else{
115                                    tagClosed = "</" + e.substring(1, e.length);
116                                }
117                                //同时存在闭合标签
118                                if($.inArray(tagClosed,uncloseTags) != -1){
119                                    uncloseTags.splice($.inArray(e,uncloseTags),1);
120                                    uncloseTags.splice($.inArray(tagClosed,uncloseTags),1);
121                                }
122                            }
123                        })
124                    }
125                    //此时uncloseTags已经是未闭合的标签列表了
126                    //生成闭合标签,根据标签嵌套规则,右标签和左标签对应,如<div><p>   --  </p></div>,所以先将未闭合标签数组逆序
127                    if(uncloseTags.length > 0){
128                        var closeTagStr = "";
129                        uncloseTags.reverse();
130                        $.each(uncloseTags,function(i,e){
131                            if(e.indexOf(" ") > 0){
132                                closeTagStr += "</" + e.substring(1, e.indexOf(" ")) + ">";
133                            }else{
134                                closeTagStr += "</" + e.substring(1, e.length);
135                            }
136                        })
137                        contentText += "..." + closeTagStr;
138                    }else{
139                        contentText += "...";
140                    }
141                    //拼接完成
142                    $(this).html(contentText);
143                }
144
145            }
146        })
147    }
148
149
150    $.fn.menuView = function (options){
151        var opts = $.extend({}, menuDefaults, options);
152        return this.each(function(){
153            var currentPageView = $("#"+opts.pageViewId).length > 0 ? $("#"+opts.pageViewId).val():opts.defaultPage;
154            var currentIndex = 0;
155            var flagTag ;
156            //如果子节点存在菜单指向属性则不考虑从标签中取值
157            if($(this).find("["+opts.pageRelAttr+"]").length > 0){
158                $(this).find("["+opts.pageRelAttr+"]").each(function(i,e){
159                    var relVal = $(e).attr(opts.pageRelAttr);
160                    if(typeof(relVal) != "undefined" && relVal == currentPageView){
161                        currentIndex = i;
162                    }
163                })
164            }else{
165                //否则从子节点中获取值
166                $(this).find(opts.pageRelTag).each(function(i,e){
167                    if($(e).text().trim() == currentPageView){
168                        currentIndex = i;
169                    }
170                })
171            }
172            if(isNull(flagTag)){
173                $(this).find(opts.hightLightTag)
174                    .eq(currentIndex)
175                    .addClass(opts.highLightClass)
176                    .siblings()
177                    .removeClass(opts.highLightClass);
178
179            }else{
180                var index = $(this).find(opts.pageRelTag).index($(flagTag));
181                $(this).find(opts.hightLightTag).eq(index).addClass(opts.highLightClass)
182                    .siblings()
183                    .removeClass(opts.highLightClass);
184            }
185        })
186    }
187}(jQuery);
188
189$(function(){if(typeof(htmlLoadSetting) != "undefined") ajaxLoadHtmlContent(htmlLoadSetting);})
190
191/**
192 * ajax加载通用页面
193 * @return
194 */
195function ajaxLoadHtmlContent(htmlLoadSetting){
196    $.each(htmlLoadSetting,function(i,e){
197        $.ajax( {
198            url: e.htmlUrl, //这里是静态页的地址
199            type: "GET", //静态页用get方法,否则服务器会抛出405错误
200            async:false,
201            success: function(data){
202                $("#"+e.locationId).append(data);
203            },
204            error: function(XMLHttpRequest, textStatus, errorThrown) {
205                console.info("----- submit search error ---");
206                console.info("----- XMLHttpRequest.responseText ---"+XMLHttpRequest.responseText);
207                console.info("----- XMLHttpRequest.status ---"+XMLHttpRequest.status);
208                console.info("----- XMLHttpRequest.readyState ---"+XMLHttpRequest.readyState);
209                console.info("----- textStatus ---"+textStatus);
210            }
211        });
212    })
213}
214
215/**
216 * 判断当前对象内容是否包含中文
217 */
218String.prototype.hasChinese = function() {
219    return (/.*[\u4e00-\u9fa5]+.*$/.test(this));
220}
221
222/**
223 * 自定义字符串结尾判定方法,以s结尾返回true,否则返回false
224 * @param s
225 * @return
226 */
227String.prototype.endWith = function(s) {
228    if (s == null || s == "" || this.length == 0 || s.length > this.length)
229        return false;
230    if (this.substring(this.length - s.length) == s)
231        return true;
232    else
233        return false;
234    return true;
235}
236
237/**
238 * 自定义字符串开始判定方法,以s开始返回true,否则返回false
239 * @param s
240 * @return
241 */
242String.prototype.startWith = function(s) {
243    if (s == null || s == "" || this.length == 0 || s.length > this.length)
244        return false;
245    if (this.substr(0, s.length) == s)
246        return true;
247    else
248        return false;
249    return true;
250}
251
252/**
253 * IE浏览器兼容jquery trim方法
254 * @return
255 */
256String.prototype.trim=function(){
257    return this.replace(/(^\s*)|(\s*$)/g, "");
258}
259
260/**
261 * 将本地图片 显示到浏览器上
262 * @param sourceId input标签的id
263 * @param targetId img的id
264 * @param boxId IE浏览器下采用滤镜方式实现预览,滤镜盒子ID
265 */
266function preImg(sourceId, targetId, boxId) {
267    var sourceSrc = window.URL.createObjectURL(document.getElementById(sourceId).files.item(0));
268    viewImgBySource(sourceSrc,targetId,boxId);
269}
270
271function viewImgBySource(sourceSrc,targetId,boxId){
272    if (navigator.userAgent.indexOf("MSIE") > -1) {
273        try {
274            document.getElementById(targetId).src = sourceSrc;
275        } catch (e) {
276            var div = document.getElementById(boxId)== undefined ? document.getElementById(targetId).parentNode : document.getElementById(boxId);
277            this.select();
278            top.parent.document.body.focus();
279            var src = document.selection.createRange().text;
280            document.selection.empty();
281            document.getElementById(targetId).style.display = "none";
282            div.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
283            div.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = src;
284        }
285    } else {
286        document.getElementById(targetId).src = sourceSrc;
287    }
288}
289
290/**
291 * 判断当前客户端浏览器是否是IE8及以下浏览器
292 * @return
293 */
294function IE8LowerTest(){
295    //检测浏览器版本
296    return $.browser.msie&&(parseInt($.browser.version)<=8);
297}
298
299/**
300 * 获取地址栏url参数
301 * @param name
302 * @return
303 */
304function getUrlParam(name){
305    var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
306    var r = window.location.search.substr(1).match(reg);
307    if(r!=null)return  unescape(r[2]); return null;
308}
309
310/**
311 * 将信息复制到剪切板
312 * 浏览器复制命令,支持从input或者textarea中进行取值,所以采用创建隐式textarea,然后选择执行复制命令
313 * @param info
314 * @return
315 */
316function copyToClipboard(info){
317    var body = document.getElementsByTagName("body")[0];
318    var textArea = document.createElement("textarea");
319    textArea.setAttribute("id","text-area");
320    //设置文本域隐藏
321    textArea.style.cssText = "overflow:hidden; width:0; height:0;border:0; outline: none;";
322    body.appendChild(textArea);
323    textArea.value = info;
324    //var selectUrl = document.getElementById("text-area");
325    textArea.select(); // 选择对象
326    document.execCommand("Copy"); // 执行浏览器复制命令
327    var pageType = getUrlParam("pageType");
328    if(!isNull(pageType) && "en" == pageType){
329        alert("copy citation success");
330    }
331    else alert("复制成功");
332}
333
334/**
335 * 从参考文献引用信息中提取参考文献索引
336 * 支持格式"[1,3,5-8,11,13-18,19]"
337 * @param refSup
338 * @return
339 */
340function getRefSupIndex(refSup){
341    if(!isNull(refSup)){
342        refSup = refSup.replace(/[\[|\]]/g, "").trim();
343        refSup = refSup.replace(/~/g,"-");
344        refSup = refSup.replace(/—/g,"-");
345        refSup = refSup.replace(/–/g,"-");
346        refSup = refSup.replace(/,/g,",");
347        var refIndexs = [] ;
348        $.each(refSup.split(","),function(i,e){
349            if(isNaN(e)){
350                var start = parseInt(e.substring(0,e.indexOf("-")));
351                var end = parseInt(e.substring(e.indexOf("-")+1,e.length+1));
352                for(var i = start ; i <= end ; i++){
353                    refIndexs.push(i);
354                }
355            }else{
356                refIndexs.push(e);
357            }
358        })
359        //alert(refIndexs);
360        return refIndexs;
361    }
362    return null;
363}
364
365/**
366 * 封装判断对象为空方法
367 * @param object
368 * @return
369 */
370function isNull(object){
371    return typeof(object) == "undefined" || object == null || object == "";
372}
373
374/**
375 * 获取随机数
376 * @param Min
377 * @param Max
378 * @return
379 */
380function GetRandomNum(Min,Max){
381    var Range = Max - Min;
382    var Rand = Math.random();
383    return(Min + Math.round(Rand * Range));
384}
385
386/**
387 * 获取网页顶部显示需要的日期信息
388 * @param type 1:中文  2英文 3英文简写
389 * 	  2017-1-11 星期三
390 * 	  Wednesday, 11 January, 2017
391 *    Jan 20th, Wednesday
392 * @return
393 */
394function dateStr(type){
395    var date = new Date();
396    return parseInt(type) == 1 ?
397        formatDate(date,type) + " "+ getTodayWeek(type) :
398        getTodayWeek(type) + ", " +formatDate(date,type)  ;
399}
400
401
402/**
403 * 将日期格式化成英文格式
404 * 2017-1-11
405 * 11 January, 2017
406 * Jan 11, 2017
407 * @param date
408 * */
409function formatDate(date,type){
410    if(!isNull(date)){
411        var dateStr = JSON.stringify(date).substring(1,11);
412        var dateVal = dateStr.split("-");
413        var month = dateVal[1];
414        if(month.charAt(0)== 0){month = month.charAt(1);}
415        var monthArray = new Array
416        ("January","February","March","April","May","June","July","August",
417            "September","October","November","December");
418        var monthArraySimple = new Array
419        ("Jan","Feb","Mar","Apr","May","June","July","Aug",
420            "Sep","Oct","Nov","Dec");
421        switch (type) {
422            case 1 :
423                return dateStr;
424            case 2 :
425                return dateVal[2]+" "+monthArray[month-1]+", "+dateVal[0];
426            case 3 :
427                return monthArraySimple[month-1]+" "+dateVal[2]+", "+dateVal[0];
428        }
429    }
430}
431
432/**
433 * 获取星期几
434 * @param type 1:中文  2英文 3英文简写
435 * @return
436 */
437function getTodayWeek(type){
438    var chinese = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");
439    var english = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
440    var englishSigle = new Array("Sun.","Mon.", "Tues.", "Wed.", "Thur.", "Fri.", "Sat.");
441    var week = new Date().getDay();
442    switch (type) {
443        case 1 :
444            return chinese[week];
445        case 2 :
446            return english[week];
447        case 3 :
448            return englishSigle[week];
449    }
450}
451
452/**
453 * 分享工具方法
454 * @param type
455 * @return
456 */
457function shareTools(type,obj){
458    var url = window.location;
459    var title = $("title").text();
460    var description = $("meta[name='abstract']").attr("content") || $("meta[name='description']").attr("content") || $("meta[name='dc.description']").attr("content") || $("meta[http-equiv='description']").attr("content");
461    var shareUrl = "";
462    switch (type)
463    {
464        case 'qzone':
465            shareUrl = "http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url="+url+"&title="+title;
466            break;
467        case 'sina':
468            shareUrl = "http://service.weibo.com/share/share.php?title="+title+"&url="+url+"&pic=";
469            break;
470        case 'weixin':
471            shareUrl = local_host + "util/QrcodeServlet?url="+url;
472            break;
473        case 'renren':
474            shareUrl = "http://widget.renren.com/dialog/share?resourceUrl="+url+"&srcUrl="+url+"&title="+title+"&pic=&description="+description;
475            break;
476        case 'google+':
477            shareUrl = "https://plus.google.com/share?url="+url+"&t="+title;
478            break;
479        case 'facebook':
480            shareUrl = "http://www.facebook.com/sharer.php?s=100&p[title]="+title+"&p[summary]="+description+"&p[url]="+url+"&p[images]=";
481            break;
482        case 'linkedin':
483            shareUrl = "http://www.linkedin.com/shareArticle?armin=armin&ro=true&mini=true&url="+url+"&source=&title="+title+"&summary="+description;
484            break;
485        case 'twitter':
486            shareUrl = "https://twitter.com/intent/tweet?text="+title+"&url="+url;
487            break;
488        default:
489            shareUrl = "http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url="+url+"&title="+title;
490            break;
491    }
492    if("weixin" == type){
493        //弹窗样式
494        //清除原有弹窗
495    	$(".shareBox .weixinBox").hide();
496//        $(".shareBox .weixinBox").remove();
497//        //微信加载
498//        var weixinHtml="";
499//        weixinHtml += '<div class="weixinBox">'
500//            +'<div class="js-qrcode-arr"></div>'
501//            +'<a href="javascript:void(0);" class="js-qrcode-close" title="关闭" onclick="closeWeiXinBox(this);"></a>'
502//            +'<div class="weixinCode">'
503//            +'<img class="weixinQrcode"/>'
504//            +'</div>'
505//            +'<p></p>'
506//            +'<p></p>'
507//            +'</div>';
508//        $(".shareBox").append(weixinHtml);
509//        $(".weixinQrcode").attr("src",shareUrl);
510    }else{
511        window.open(shareUrl, "_blank");
512    }
513}
514function closeWeiXinBox(obj){
515    $(obj).parent().hide();
516}

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.