分类 web 下的文章

Math对象中所有的属性和方法都是静态的,没有构造函数,所以不能用Math()来定义一个Math对象,可以直接使用Math对象提供的属性和方法

Math对象的属性

属性名说明
constructor对创建此对象的函数的引用
E自然对数的底数,常数e,其值近似为2.718
LN1010的自然对数,其值近似为2.302
LN22的自然对数,其值近似为0.693
LOG10E以10为底的e的对数,其值近似为0.434
LOG2E以2为底的对数,其值近似为1.442
PI常量π,其值近似为3.141159
prototype向对象添加自定义的属性和方法
SQRT1_21c除以2的平方根,其值近似为0.707
SQRT22的平方根,其值其值近似为1.414

Math对象的方法

方法名说明
abs()返回x的绝对值
acos(x)返回x的反余弦值,参数x的有效值范围为-1.0~1.0。如果超过该范围则返回NaN
asin(x)返回x的反正弦值,参数x的有效值范围为-1.0~1.0。如果超过该范围则返回NaN,否则返回-π/2~π/2之间的弧度值
atan(x)返回x反正切值。返回值为-π/2~π/2之间的弧度值
atan2(y,x)返回从一个点(x,y)与X轴之间的角度,参数x和y分别为X坐标和Y坐标,返回值为-π~π之间的值
ceil(x)向上舍入,即返回大于或等于x并且与x最接近的整数
cos(x)返回x的余弦值。返回值为-1.0~1.0之间的值
exp(x)返回ex,其中e为自然对数的底数
floor(x)向上舍入,即返回小于或等于x并且与x最接近的整数
log(x)返回x的自然对数。参数x为大于0的书,如果x为负数,则返回NAN
max(value1,value2...)返回参数中最大的值,如果没有参数,返回-Infinity。如果有一个参数为NaN,或有一个不能转换成数字的参数,返回NAN
min(value1,value2...)返回参数中最小的值,如果没有参数,返回-Infinity。如果有一个参数为NaN,或有一个不能转换成数字的参数,返回NAN
pow(x,y)返回xy,如果xy的结果虚数或复数,Math.pow()将返回NaN,如果xy的结果过大,可能会返回Infinity
random()返回一个0~1之间的随机数
round(x)舍入到最近的整数,返回与x最近的整数
sin(x)返回x的正弦值。返回值为-1.0~10的值
sqrt(x)返回x的平方根。如果x为负数,返回NaN
tan(x)返回x的正切值

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>数组元素排列</title>
    <link rel="stylesheet" href="">
    <script>
    //定义用于升序排列的函数
    function asc(x,y){
        if(x>y){
            return 1;
        }
        else if(x<y){
            return -1;
        }
        else{
            return 0;
        }
    }
    //定义用于降序排列的函数
    function desc(x,y){
        if(x>y){
            return -1;
        }
        else if(x<y){
            return 1;
        }
        else{
            return 0;
        }
    }
    //定义一个数组
    var arr=new Array(5,29,14,656,206,41,3,159);
    document.write("原数组中的元素为:"+arr.toString()+"<br>");
    //将数组元素升序排列
    arr.sort(asc);
    document.write("数组元素升序排列后为:"+arr.toString()+"<br>");
    ////将数组元素降序排列
    arr.sort(desc);
    document.write("数组元素降序排列后为:"+arr.toString()+"<br>");
    </script>
</head>
<body>
    
</body>
</html>

Array是一个有序的数据集合
在JavaScript中定义数组的方法有三种
1.使用数组直接量来定义
2.使用数组对象的Array()来构造函数来定义
3.使用其他对象中的方法,如使用String对象中的split()方法来返回一个数组

1.使用数组直接量
数组名=[element1,element2,element3,...]

2.使用构造函数
数组名=new Array();
数组名=new Array(length);
数组名=new Array(element1,element2,element3,...);
数组名=Array();
数组名=Array(length);
数组名=Array(element1,element2,element3,...);

3.使用String对象的split()方法
String对象的split()方法可以将一个字符串分隔成一个数组
StringObj.split(separator.limit)
StringObj是String的对象,separator是字符串或正则表达式

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Match的对象实例</title>
    <link rel="stylesheet" href="">
    <script>
    var m=parseInt(prompt("请输入随机数的下限","0"));
    var n=parseInt(prompt("请输入随机数的上限","0"));
    with(document){
        //Math的属性和方法
        write("Math.E="+Math.E+"<br>");
        write("Math.LN2="+Math.LN2+"<br>");
        write("Math.LN10="+Math.LN10+"<br>");
        write("Math.LOG2E="+Math.LOG2E+"<br>");
        write("Math.LOG10E="+Math.LOG10E+"<br>");
        write("Math.PI="+Math.PI+"<br>");
        write("Math.SQRT1_2="+Math.SQRT1_2+"<br>");
        write("Math.SQRT2="+Math.SQRT2+"<hr>");
        //使用log方法计算自然数
        write("Math.log("+n+"):"+Math.log(n)+"<br>");
        write("Math.log("+m+"):"+Math.log(m)+"<br>");
        write("Math.log(Math.exp("+m+")):"+Math.log(Math.exp(m))+"<hr>");
        //使用sqrt方法计算平方根
        write("Math.sqrt("+m+"):"+Math.sqrt(m)+"<br>");
        write("Math.sqrt("+n+"):"+Math.sqrt(n)+"<hr>");
        //在for循环中使用random方法产生10个随机数
        document.write(m+"到"+n+"之间的随机数为:<br>");
        for(var i=0;i<10;i++){
            var reasult=Math.round(Math.random()*(n-m)+m);
            document.write(reasult+",");
        }
    }
    </script>
</head>
<body>
    
</body>
</html>

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>String的属性和方法</title>
    <link rel="stylesheet" href="">
    <script>

    </script>
</head>
<body>
    Strin定义字符串有两种方法
    1.使用new语句通过调用字符串对象的构造函数定义一个字符串对象
    2.使用var语句定义一个字符串变量,而这个字符串变量可以直接使用字符串的方法个属性
    String对象的属性和方法
    String属性有三个:length,constructor,prototype
    <code>
        var s=0;
        var newString=new String("teacher");
        var s=newString.length;
        alert(s.toString(16));
    </code>
    <code>
        var newName=new String("Hello");
        if(newName.constructor==String);{
        alert("It is a String");
        }
    </code>    
    <code>
        function employee(name,age){
        this.name=name;
        this.age=age;
        }
        var info=new employee("kate",35);
        employee.prototype.saylary(null);
        info.salary=600;
        alert(info.salary);
    </code>
    
</body>
</html>

html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Language" content="zh-CN">
<title>jquery右侧固定数字显示隐藏导航菜单</title>
<script type="text/javascript" src="js/jquery.js"></script>
<link href="css/default.css" rel="stylesheet" type="text/css">
</head>
<body style="height:600px;">
<div id="header">
  <div id="top">
    <div id="warp">
      <div class="topleft fl">

      </div>
      <div class="topright fr"><a href="/">返回首页</a></div>
    </div>
  </div>
</div>
<!-- 左侧导航 -->
<div class="leftNav">
    <a href="#" style="left: -110px;">站长素材<em>0</em></a>
    <a href="#" style="left: -110px;">书签切换<em>1</em></a>
    <a href="#" style="left: -110px;">幻灯片<em>2</em></a>
    <a href="#" style="left: -110px;">图片滚动-左<em>3</em></a>
    <a href="#" style="left: -110px;">图片滚动-上<em>4</em></a>
    <a href="#" style="left: -110px;">图片无缝滚动-左<em>5</em></a>
    <a href="#" style="left: -110px;">图片无缝滚动-上<em>6</em></a>
    <a href="#" style="left: -110px;">文字滚动-左<em>7</em></a>
    <a href="#" style="left: -110px;">文字滚动-上<em>8</em></a>
    <a href="#" style="left: -110px;">文字无缝滚动-左<em>9</em></a>
    <a href="#" style="left: -110px;">文字无缝滚动-上<em>10</em></a>
    <a href="#" style="left: -110px;">其它基础效果<em>11</em></a>
</div>
<script type="text/javascript">
    var btb=$(".leftNav");
    var tempS;
    $(".leftNav").hover(function(){
            var thisObj = $(this);
            tempS = setTimeout(function(){
            thisObj.find("a").each(function(i){
                var tA=$(this);
                setTimeout(function(){ tA.animate({left:"0"},300);},50*i);
            });
        },200);

    },function(){
        if(tempS){ clearTimeout(tempS); }
        $(this).find("a").each(function(i){
            var tA=$(this);
            setTimeout(function(){ tA.animate({left:"-110"},300,function(){
            });},50*i);
        });

    });
    var isIE6 = !!window.ActiveXObject&&!window.XMLHttpRequest;
    if( isIE6 ){ $(window).scroll(function(){ btb.css("top", $(document).scrollTop()+100) }); }
</script>
<!-- 右侧导航 -->
<div class="rightNav">
    <a href="#" style="right: -110px;"><em>0</em>站长素材</a>
    <a href="#" style="right: -110px;"><em>1</em>书签切换</a>
    <a href="#" style="right: -110px;"><em>2</em>幻灯片</a>
    <a href="#" style="right: -110px;"><em>3</em>图片滚动-左</a>
    <a href="#" style="right: -110px;"><em>4</em>图片滚动-上</a>
    <a href="#" style="right: -110px;"><em>5</em>图片无缝滚动-左</a>
    <a href="#" style="right: -110px;"><em>6</em>图片无缝滚动-上</a>
    <a href="#" style="right: -110px;"><em>7</em>文字滚动-左</a>
    <a href="#" style="right: -110px;"><em>8</em>文字滚动-上</a>
    <a href="#" style="right: -110px;"><em>9</em>文字无缝滚动-左</a>
    <a href="#" style="right: -110px;"><em>10</em>文字无缝滚动-上</a>
    <a href="#" style="right: -110px;"><em>11</em>其它基础效果</a>
</div>
<script type="text/javascript">
    var btb=$(".rightNav");
    var tempS;
    $(".rightNav").hover(function(){
            var thisObj = $(this);
            tempS = setTimeout(function(){
            thisObj.find("a").each(function(i){
                var tA=$(this);
                setTimeout(function(){ tA.animate({right:"0"},300);},50*i);
            });
        },200);

    },function(){
        if(tempS){ clearTimeout(tempS); }
        $(this).find("a").each(function(i){
            var tA=$(this);
            setTimeout(function(){ tA.animate({right:"-110"},300,function(){
            });},50*i);
        });

    });
    var isIE6 = !!window.ActiveXObject&&!window.XMLHttpRequest;
    if( isIE6 ){ $(window).scroll(function(){ btb.css("top", $(document).scrollTop()+100) }); }
</script>
</body>
</html>

CSS

@charset "utf-8";
/* CSS Document */
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,
form,fieldset,input,textarea,p,blockquote,th,td,img { padding: 0; margin: 0; }
fieldset,img { border: 0; }
address,caption,cite,code,dfn,em,strong,th,var,i { font-weight: normal; font-style: normal; }
ol,ul,li { list-style: none; }
caption,th { text-align: left; }
h1,h2,h3,h4,h5,h6 { font-weight: normal; font-size: 100%; }
q:before,q:after { content:''; }
abbr,acronym { border: 0; }
/*-- All --*/
body{ color:#333;font:12px/20px Arial,"Microsoft YaHei","宋体",sans-serif; text-align:center; background:#DCDCDC; }
a{ color:#333; text-decoration:none; outline:none;}
a:hover {color:#f00; text-decoration:underline; }
table { border-collapse: collapse; border-spacing: 0; empty-cells:show; }
table td,table th{ border:#ddd solid 1px; padding:5px 10px; }
table th{ background:#176D97; color:#fff;  }
table .new td{ color:#f60; font-weight:bold;  }
/*-- 左侧导航 --*/
.leftNav{ position:fixed; width:140px;  left:0; top:100px; _position:absolute; text-align:left; cursor:pointer; background-image:url(about:blank);  }
.leftNav a{ display:block; position:relative; height:30px; line-height:30px; margin-bottom:2px; background:#fff; padding-left:10px; width:130px; overflow:hidden;  cursor:pointer; left:-110px; }
.leftNav a:hover{ text-decoration:none; color:#1974A1;  }
.leftNav a:hover em{ background:#00b700}
.leftNav a em{ display:block; float:right; width:30px; background:#1974A1; color:#fff; font-size:16px; text-align:center; margin-left:10px;}

/*-- 右侧导航 --*/
.rightNav{ position:fixed; width:140px;  right:0; top:100px; _position:absolute; text-align:left; cursor:pointer; background-image:url(about:blank);  }
.rightNav a{ display:block; position:relative; height:30px; line-height:30px; margin-bottom:2px; background:#fff; padding-right:10px; width:130px; overflow:hidden;  cursor:pointer; right:-110px; }
.rightNav a:hover{ text-decoration:none; color:#1974A1;  }
.rightNav a:hover em{ background:#00b700}
.rightNav a em{ display:block; float:left; width:30px; background:#1974A1; color:#fff; font-size:16px; text-align:center; margin-right:10px;}

JS

<script src="//cdn.bootcss.com/jquery/2.2.1/jquery.min.js"></script>

String对象的方法

方法名说明
anchor()为字符串对象中的内容两边加上HTML的<a></a>标记对
big()为字符串对象中的内容两边加上HTML的<big></big>标记对
bold()为字符串对象中的内容两边加上HTML的<b></b>标记对
fontcolor()为字符串对象中的内容两边加上HTML的<font></font>标记对,并设置color属性
charAt()返回字符串对象中的指定位置处的字符
charCodeAt()返回一个整数,该整数表示字符串中对象中指定位置处的字符的Unicode属性
indexOf()返回某个子字符串对象中第一次出现的字符位置
lastIndexOf()作用与indexOf()相似,但搜索方向为从右到左
match()使用正则表达式模式对字符串进行搜索,并返回一个包含该搜索结果的数组
replace()使用正则表达式模式对字符串进行搜索,并对搜索到的内容用指定的字符串替换
search()返回使用正则表达式模式搜索时,第一匹配的子字符串在整个被搜索的字符中的位置
slice()返回在一个字符串的两个指定位置之间的子字符串
split()返回一个字符串按某种分隔标记符拆分为若干子字符串时所产生的字符串数组
substr()返回从指定位置开始,取出具有指定长度个数的字符所组成的字符串
substring()返回从一个位置开始,到另外一个结束位置的所有字符所组成的字符串
toLowerCase()返回一个字符串,该字符串中的所有字母转换为小写字母
toUpperCase()返回一个字符串,该字符串中的所有字母转换为大写字母
valueOf()返回某个字符串对象的原始值

用于获取日期指定部分的方法

获取部分方法名说明
获取年份信息getFullYear()获取日期对象中的年份信息,使用本地时,以4位数表示
getUTCFullYear()使用UTC小时,以4位数表示
getYear()使用本地时,如果年份小于2000则以2位数表示,如果大于2000则以4位数表示。建议使用getFullYear()为佳
月份getMonth()使用本地时,返回0-11之间的整数
getUTCmonth()使用UTC月
天数getDate()使用本地时,返回0-31之间的整数
getUTCDate()使用UTC天
星期getDay()星期几的信息,使用本地时,返回0-6之间的整数
getUTCDay()使用UTC星期几
小时getHours()返回0-23之间的整数
getUTCHours()使用UTC小时
分钟getMinutes()返回0-59之间的整数
getUTCMinutes()使用UTC分钟
秒钟getSeconds()返回0-59之间的整数
getUTCSeconds()使用UTC秒钟
毫秒getMiliseconds()返回0-999之间的整数
getMiliseconds()使用UTC毫秒
时间差getTime()获取日期对象所代表额度时间与1970年1月1日0时之间的毫秒数差
getTimezoneOffset()获取日期所代表的时间与UTC小时之间的时差数,以分钟为单位

用于设置日期指定部分的方法

设置部分方法名说明
设置年份setFullYear(year[,month,day])设置日期对象中的年份信息,使用本地时
setUTCFullYear(year[,month,day])使用UTC小时
setYear(year)使用本地时,如果年份小于2000则以2位数表示
月份getMonth(month[,day])使用本地时
getUTCMonth(month[,day]使用UTC月
天数setDate(day)本地时
setUTCDate(day)UTC天
小时setHours(hours[,minutes,seconds,miliseconds])本地时
setUTCHours(hours[,minutes,seconds,miliseconds])UTC时
分钟setMinutes(minutes[,seconds,miliseconds])本地时
setUTCMinutes(minutes[,seconds,miliseconds])UTC时
setSeconds(seconds[,miliseconds])本地时
setUTCSeconds(seconds[,miliseconds])UTC时
毫秒setMiliSeconds(miliseconds)本地时
setUTCMiliSeconds(miliseconds)UTC时
通过毫秒设置时间setTime(miliseconds)通过距离1970年1月1日0时多少毫秒方式设置时间

将日期对象转移为字符串的方法

方法名说明
toDateString()将当前Date对象中的日期转换为字符串,返回格式为“星期 月份 天数 年份”
toTimeString()将当前Date对象中的日期转换为字符串
toUTCString()将当前Date对象转换以UTC时间表示的字符串
toGMTString()将当前Date对象转换以GMT时间表示的字符串
toLocalString()将当前Date对象转换以本地时间表示的字符串
toLocalDateString()将当前Date对象转换以本地时间表示的日期字符串
toLocalTimeString()将当前Date对象转换以本地时间表示的时间字符串
toString()将当前Date对象转换为字符串的形式表示

在网上找了很多、如果根据网络提供的API直接JS Ajax查询会出问题:拒绝访问
网上说是跨域了、解决办法就是java后台访问这个API地址。下面罗列一些网络上的API地址。

淘宝网

API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443
参数:
tel:手机号码
返回:JSON

拍拍

API地址: http://virtual.paipai.com/extinfo/GetMobileProductInfo?mobile=15850781443&amount=10000&callname=getPhoneNumInfoExtCallback
参数:
mobile:手机号码
callname:回调函数
amount:未知(必须)
返回:JSON

财付通

API地址: http://life.tenpay.com/cgi-bin/mobile/MobileQueryAttribution.cgi?chgmobile=15850781443
参数:
chgmobile:手机号码
返回:xml

百付宝

API地址: https://www.baifubao.com/callback?cmd=1059&callback=phone&phone=15850781443
参数:
phone:手机号码
callback:回调函数
cmd:未知(必须)
返回:JSON

115

API地址: http://cz.115.com/?ct=index&ac=get_mobile_local&callback=jsonp1333962541001&mobile=15850781443
参数:
mobile:手机号码
callback:回调函数
返回:JSON

有道

API地址: http://www.youdao.com/smartresult-xml/search.s?jsFlag=true&type=mobile&q=13985046628
参数:
type:mobile(表示查询手机号码)
q:手机号码
返回:JSON

这里用的是有道的API、下面是代码:

页面代码:

function findPhoneAddres(){   
                   var mobile = $("#usermobil").val();     
                   var urlAction = "<%=path %>/customermanage/listcustomerinfo!findPhoneAddres.action";   
                   $.get(urlAction, {phoneStr:mobile}, function (data){   
                        if(data==''||data==null){   
                            alertMsg.info("找不到您输入的手机号码归属地!");       
                        }else{   
                            var json = eval("("+data+")");       
                            var phoneStr = json.location ;   
                            $("#userAddres").val(phoneStr.split(" ")[1]);    
                            $("#userAddresByPhone").val(phoneStr.split(" ")[1]);       
                            $("#userAddresLabel").html("手机号归属地:"+phoneStr.split(" ")[1])   
                        }     
                    });        
}

后台Action方法:

 /*  
 * 手机号码归属地查询地址  
 */   
private final String urlAddres = "http://www.youdao.com/smartresult-xml/search.s?" +   
                                 "jsFlag=true&type=mobile&q=";   
  /**  
 * 查询手机号码归属地  
 * @return  
 * @throws Exception  
 */   
public String findPhoneAddres() throws Exception{   
    String phone = request.getParameter("phoneStr");   
    String url = urlAddres+phone;       
    String result = ActionURL.callUrlByGet(url, "GBK");     
    request.setCharacterEncoding("UTF-8");   
    response.setContentType("text/html;charset=UTF-8");   
    PrintWriter out = response.getWriter();     
    out.print(result);     
    out.close();        
    return null;   
}

ActionURL静态类的callUrlByGet方法:

public static String callUrlByGet(String callurl,String charset){     
        String result = "";     
        try {     
            URL url = new URL(callurl);     
            URLConnection connection = url.openConnection();     
            connection.connect();     
            BufferedReader reader = new BufferedReader(new    
                    InputStreamReader(connection.getInputStream(),charset));     
            String line;     
            while((line = reader.readLine())!= null){      
                result += line;     
                result += "\n";     
            }     
        } catch (Exception e) {     
            e.printStackTrace();     
            return "";     
        }     
        if(result!=null&&!"".equals(result)){   
            result = result.substring(result.indexOf("{" +   
            ""), (result.indexOf("}")+1) );     
        }    
        return result;       
    }

Test测试方法:

public static void main(String[] args) {   
        String url = "http://www.youdao.com/smartresult-xml/search.s?" +   
                     "jsFlag=true&type=mobile&q=13985046628";   
        String result = callUrlByGet(url,"GBK");   
        System.out.println(result);      
    }

输出的结果:
{'product':'mobile','phonenum':'13985046628','location':'贵州 贵阳'}

出自http://hzw2312.blog.51cto.com/2590340/936166

相关https://m69w.com/247.html


VeryNginx的GitHub地址: https://github.com/alexazhou/VeryNginx

VeryNginx 基于 lua_nginx_module(openrestry) 开发,实现了高级的防火墙、访问统计和其他的一些功能。 强化了 Nginx 本身的功能,并提供了友好的 Web 交互界面。

VeryNginx在线演示地址: http://alexazhou.xyz/vn/index.html

用户名 / 密码: verynginx / verynginx
下面的安装教程是基于CentOS 6 64位系统进行的

安装依赖

yum install -y gcc gcc-c++ make cmake autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel libaio readline-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel libxslt-devel libicu-devel libevent-devel libtool libtool-ltdl bison gd-devel vim-enhanced pcre-devel zip unzip ntpdate sysstat patch bc expect rsync git lsof lrzsz

进入/tmp目录

cd /tmp/

下载OpenResty

wget https://openresty.org/download/ngx_openresty-1.9.7.1.tar.gz

解压OpenResty

tar -xvzf ngx_openresty-1.9.7.1.tar.gz

进入OpenResty源代码目录

cd ngx_openresty-1.9.7.1

配置configure及变量信息

./configure --prefix=/usr/local/openresty --user=nginx --group=nginx --with-http_stub_status_module --with-luajit

编译安装OpenResty

gmake && gmake install

退回到/tmp目录中

cd ..

克隆VeryNginx

git clone https://github.com/alexazhou/VeryNginx.git

删除OpenResty中的nginx.conf默认配置文件

rm -rf /usr/local/openresty/nginx/conf/nginx.conf

下载VeryNginx的nginx.conf配置文件

wget https://dl.m69w.com/scripts/nginx.conf -O /usr/local/openresty/nginx/conf/nginx.conf

复制VeryNginx到OpenResty中

cp -r ~/VeryNginx/VeryNginx /usr/local/openresty/VeryNginx

修改/usr/local/openresty/目录的所有者为nginx用户

chown -R nginx:nginx /usr/local/openresty/

启动VeryNginx

/usr/local/openresty/nginx/sbin/nginx

打开浏览器访问 http://你的服务器IP/VeryNginx/index.html
默认用户名和密码是 verynginx / verynginx
登录之后就可以查看状态,并对配置进行修改了。修改配置后,记得到 「Config > System > All Configuration」去保存.
如果需要详细的配置说明,请查看 VeryNginx Wiki

相关:
https://github.com/jgmdev/ddos-deflate说明
Linux被DDOS&CC攻击解决实例
通过nginx配置文件抵御攻击
防CC的收集以及实现基于js的CC攻击


来自:一段JS代码让Markdown自动生成目录

实现方法

页面结构

//放入在文章页内容前面
<div class="BlogAnchor">
    <p>
        <b id="AnchorContentToggle" title="收起" style="cursor:pointer;">目录[-]</b>
    </p>
    <div class="AnchorContent" id="AnchorContent"> </div>
</div>

Js代码

//在文章中查找title并填充到div AnchorContent中
$(".post-content").find("h2,h3,h4,h5,h6").each(function(i,item){
    var tag = $(item).get(0).localName;
    $(item).attr("id","wow"+i);
    $("#AnchorContent").append('<li><a class="new'+tag+' anchor-link" onclick="return false;" href="#" link="#wow'+i+'">'+(i+1)+" · "+$(this).text()+'</a></li>');
    $(".newh2").css("margin-left",0);
    $(".newh3").css("margin-left",20);
    $(".newh4").css("margin-left",40);
    $(".newh5").css("margin-left",60);
    $(".newh6").css("margin-left",80);
});
$("#AnchorContentToggle").click(function(){
    var text = $(this).html();
    if(text=="目录[-]"){
        $(this).html("目录[+]");
        $(this).attr({"title":"展开"});
    }else{
        $(this).html("目录[-]");
        $(this).attr({"title":"收起"});
    }
    $("#AnchorContent").toggle();
});

CSS代码

/*导航*/
.BlogAnchor {
    background: #f4f7f9;
    padding: 10px;
    line-height: 180%;
}
.BlogAnchor p {
    font-size: 18px;
    color: #15a230;
    margin-bottom: 0.3em;
}
.BlogAnchor .AnchorContent {
    padding: 5px 0px;
}
.BlogAnchor li{
    text-indent: 20px;
    font-size: 14px;
}
#AnchorContentToggle {
    font-size: 13px;
    font-weight: normal;
    color: #FFF;
    display: inline-block;
    line-height: 20px;
    background: #5cc26f;
    font-style: normal;
    padding: 1px 8px;
    margin-right: 10px;
}
.BlogAnchor a:hover {
    color: #5cc26f;
}
.BlogAnchor a {
    text-decoration: none;
}

导航扩展

同时也可以实现锚点之间的平滑滚动,使用jquery animate

$(".anchor-link").click(function(){
    $("html,body").animate({scrollTop: $($(this).attr("link")).offset().top}, 1000);
});

结束



后台抓爬虫
今天看了一个关键字:健身
这个站点是没有健身这个专栏的
所以我相信最早那个ip的关键字是人为输入
再看上面的那个关键字搜索,
不看ip不会知道
来自360还不带bot,spider,UA都是iPhone的,够6的
要么是用户手机里安装了360相关产品,要么你懂的
就奇怪了,人家自己手动输入关键字
你360凭什么去模仿人家行为,万一给你模仿各种登陆,支付宝登陆什么的\
其实不止360还有百度,换UA来看
说多没图不好
请输入图片描述
请输入图片描述
请输入图片描述