前端笔记

| 分类 web  | 标签 web  js  浏览次数: -

规范

样式不要写死到元素上

脚本一般放在最后

能把多个模板放在一起的话就最好不要分开,不然工作量会比较大

js截取字符串

  • indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置
  • lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索
  • substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符
<SCRIPT type="text/javascript">
var time='2009-12-30 13:28:29';
alert(time);
var year=time.substr(0,4);
alert(year);
var index1=time.indexOf("-");
var index2=time.lastIndexOf("-");
var cha=parseInt(index2)-(parseInt(index1)+1);
var month=time.substr((parseInt(index1)+1),cha);
alert(month);
</script>

替换、分割

<SCRIPT type="text/javascript">
var time='2009-12-30 13:28:29';
var timearr=time.replace(" ",":").replace(/\:/g,"-").split("-");

for(i=0;i<timearr.length;i++){
alert(timearr[i]);
}
</script>

getElementById和innerHTML

<b id="demo">A Paragraph.</b>
<div id="myDIV">A DIV.</div>
<script>
x=document.getElementById("demo");
x.innerHTML="Hello World";
document.getElementById("myDIV").innerHTML="How are you?";
</script>

console

换行

shift+ente

清空输入

①console.clear() ②ctrl+L ③左上角圆图标

JavaScript 是面向对象的语言,但 JavaScript 不使用类。JavaScript 基于 prototype,而不是基于类的。

字符串查找

var str="Hello world!"
document.write(str.indexOf("Hello") + "<br />")定位字符串中某一个指定的字符首次出现的位置。未找到返回-1

match()查找字符串中特定的字符,并且如果找到的话,则返回这个字符。

var str="Visit Microsoft!"
document.write(str.replace(/Microsoft/,"W3School"))在字符串中用某些字符替换另一些字符。

concat() 方法来合并两个数组。

js产生随机数

<script>
  function GetRandomNum(Min,Max)
  {
    var Range = Max - Min;
    var Rand = Math.random();
    return(Min + Math.round(Rand * Range));
  }
  var num = GetRandomNum(1,10);
  alert(num);
</script>
<script>
  var chars = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
  //产生n个随机数
  function generateMixed(n)
   {
    var res = "";
    for(var i = 0; i < n ; i ++)
    {
      var id = Math.ceil(Math.random()*35);
      res += chars[id];
    }
    return res;
  }
  var num = generateMixed(4);
  alert(num);
</script>
1.Math.random(); 结果为0-1间的一个随机数(包括0,不包括1)

2.Math.floor(num); 参数num为一个数值,函数结果为num的整数部分。

3.Math.round(num); 参数num为一个数值,函数结果为num四舍五入后的整数。

Math:数学对象,提供对数据的数学计算。

Math.random(); 返回0和1间(包括0,不包括1)的一个随机数。

Math.ceil(n); 返回大于等于n的最小整数。

用Math.ceil(Math.random()*10);时,主要获取1到10的随机整数,取0的几率极小。

Math.round(n); 返回n四舍五入后整数的值。

用Math.round(Math.random());可均衡获取0到1的随机整数。

用Math.round(Math.random()*10);时,可基本均衡获取0到10的随机整数,其中获取最小值0和最大值10的几率少一半。

Math.floor(n); 返回小于等于n的最大整数。

用Math.floor(Math.random()*10);时,可均衡获取0到9的随机整数。

CSS样式表使用

<html>
<head>
<style type="text/css">
  .adKeyword
  {
    color: blue;
  }
</style>
</head>
<body>
  <div class="adKeyword">CSS样式</div>
</body>
</html>

获取元素的值

js中

var pwd0=document.getElementById("ui-password0-text").value;        #获取页面上一个有id的元素的值
var pwd0=document.getElementById("ui-password0-text").innerHTML;      #获取元素中的内容

jquery中

var new_pwd2 = $("#ui-password2-text").val();         #获取页面上一个有id的元素的值
var new_pwd2 = $("#ui-password2-text").text();        #获取元素中的内容
var new_pwd2 = $("#ui-password2-text").html();        #获取html内容

光标定位

document.getElementById(“文本框的ID”).focus();

$ 符号

jQuery 使用 $ 符号作为 jQuery 的简介方式。某些其他 JavaScript 库中的函数(比如 Prototype)同样使用 $ 符号。

jQuery 使用名为 noConflict() 的方法来解决该问题。 var jq=jQuery.noConflict(),帮助您使用自己的名称(比如 jq)来代替 $ 符号。

a背景图片位置、大小设置

a {
    background: url('back_before.png') no-repeat left;
    background-size: 8px 17px;
    background-position: 0 3px;
    position: absolute;
    text-align: right;
    width: 43px;
    height: 24px;
 }

 a:hover {
    color: blue;
    background: url('back_up.png') no-repeat left;
    background-size: 8px 17px;
    background-position: 0 3px;
    position: absolute;
  /*行内元素(如a标签)无法设置宽高;当设置了绝对定位或者浮动,会生成块框(即变成块元素),才可以设置宽高*/
    text-align: right;
    width: 43px;
    height: 24px;
}

Sea.js

除了解决命名冲突和依赖管理,使用 Sea.js 进行模块化开发还可以带来很多好处:

  • 1.模块的版本管理。通过别名等配置,配合构建工具,可以比较轻松地实现模块的版本管理。
  • 2.提高可维护性。模块化可以让每个文件的职责单一,非常有利于代码的维护。Sea.js 还提供了 nocache、debug 等插件,拥有在线调试等功能,能比较明显地提升效率。
  • 3.前端性能优化。Sea.js 通过异步加载模块,这对页面性能非常有益。Sea.js 还提供了 combo、flush 等插件,配合服务端,可以很好地对页面性能进行调优。
  • 4.跨环境共享模块。CMD 模块定义规范与 Node.js 的模块规范非常相近。通过 Sea.js 的 Node.js 版本,可以很方便实现模块的跨服务器和浏览器共享。
    var util = require('./util.js');
    util.print('我是字符串');
    

    不再需要冗长的命名空间了,也不再需要担心命名的冲突 不需要手动管理 js 文件的依赖,依赖关系写在代码中,SeaJS 会自动处理

文本框禁止剪切、复制、粘贴

onpaste="return false" oncontextmenu="return false" oncopy="return false" oncut="return false"

==和===区别

== equality 等同,=== identity 恒等。

==, 两边值类型不同的时候,要先进行类型转换,再比较 ===,不做类型转换,类型不同的一定不等

  • 下面分别说明:
  • 先说 ===,这个比较简单。下面的规则用来判断两个值是否===相等: 1、如果类型不同,就[不相等] 2、如果两个都是数值,并且是同一个值,那么[相等];(!例外)的是,如果其中至少一个是NaN,那么[不相等]。(判断一个值是否是NaN,只能用isNaN()来判断) 3、如果两个都是字符串,每个位置的字符都一样,那么[相等];否则[不相等]。 4、如果两个值都是true,或者都是false,那么[相等]。 5、如果两个值都引用同一个对象或函数,那么[相等];否则[不相等]。 6、如果两个值都是null,或者都是undefined,那么[相等]。

  • 再说 ==,根据以下规则: 1、如果两个值类型相同,进行 === 比较。 2、如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较: a、如果一个是null、一个是undefined,那么[相等]。 b、如果一个是字符串,一个是数值,把字符串转换成数值再进行比较。 c、如果任一值是 true,把它转换成 1 再比较;如果任一值是 false,把它转换成 0 再比较。 d、如果一个是对象,另一个是数值或字符串,把对象转换成基础类型的值再比较。对象转换成基础类型,利用它的toString或者valueOf方法。 js核心内置类,会尝试valueOf先于toString;例外的是Date,Date利用的是toString转换。非js核心的对象,令说(比较麻烦,我也不大懂) e、任何其他组合,都[不相等]。

用 == 的时候要有充分的注释

js操作数组

a = [1,2,3,4,5,6]
a.splice(b,c)      //从下标b开始删除c个元素
a.slice(start,end) //从下标start开始截取到下标end-1,若end省略,则截取到最后

jquery qrcode生成二维码

普通二维码

$("#show").qrcode({
                  render: render,
                  width: 200, //宽度
                  height: 200, //高度
                  text: "http:www.cnblogs.com/hm24", //任意内容
                  src: "{% static 'img/logo.png' %}" //添加logo,大小为宽高的2.5比例,logo_height = 200/2.5
              });

JS生成中文二维码, text : uft16to8(“任意内容”);

function utf16to8(str) {
    var out, i, len, c;
    out = "";
    len = str.length;
    for (i = 0; i < len; i++) {
        c = str.charCodeAt(i);
        if ((c >= 0x0001) && (c <= 0x007F)) {
            out += str.charAt(i);
        } else if (c > 0x07FF) {
            out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
            out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
            out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
        } else {
            out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
            out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
        }
    }
    return out;
}

鼠标相关

基本

onmousedown    script    当元素上按下鼠标按钮时触发。
onmousemove    script    当鼠标指针移动到元素上时触发。
onmouseout     script    当鼠标指针移出元素时触发。
onmouseover    script    当鼠标指针移动到元素上时触发。
onmouseup      script    当在元素上释放鼠标按钮时触发。

鼠标移动到图片上,图片放大

<!DOCTYPE html>
<html>
<head>
<script>
    function bigImg(x)
    {
        x.style.height="380px";
        x.style.width="380px";
    }

    function normalImg(x)
    {
        x.style.height="128px";
        x.style.width="128px";
    }
</script>
</head>
<body>
    <img onmousemove="bigImg(this)" onmouseout="normalImg(this)" border="0" src="/i/eg_tulip.jpg" alt="Smiley" style="height:128px;width:128px;">
</body>
</html>

正则表达式

正则表达式和语言无关

juqery

$("#").val($.trim($("#").text()));         修改操作从html获取数据填充并去除空格
var a = $trim($("#").val());               js获得值去除空格
$("#").html("输入合法数据")
console.log(data);                         可以在谷歌浏览器console项查看数据
if(/^\s*$/gi.test(aaa))                    aaa为空为true不为空为false
if(/^[\d\.]+$/.test("12.3"))
if(/^[\d]*(\.{0,1})[\d]+$/.test(aaa))
<span><i></i></span>
if re.match(r"^[\d]+(\.{0,1})[\d]+$","")
if re.match(r"^20(\d{12})$","20160316121212")

JS正则表达式

<html>
<body>
<script type="text/javascript">
  var str = "Visit W3School, W3School is a place to study web technology.";
  var patt = new RegExp("W3School","g");
  var result;
  while ((result = patt.exec(str)) != null)
   {
    document.write(result);
    document.write("<br />");
    document.write(patt.lastIndex);
    document.write("<br />");
  }
  document.write(patt.lastIndex);
</script>
</body>
</html>

如果在一个字符串中完成了一次模式匹配之后要开始检索新的字符串,就必须手动地把 lastIndex 属性重置为 0,没有全局属性”g”的话就没有这个问题

compile() 方法用于改变 RegExp。 compile() 既可以改变检索模式,也可以添加或删除第二个参数。

选中复选框显示按钮,未选中则隐藏

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Insert title here</title>
  <script src="/jquery/jquery-1.11.1.min.js"></script>
</head>
<body>
  <button id="btnPass" hidden="hidden">通过</button>
  <button id="btnFai" hidden="hidden">失败</button>
  <input type="checkbox" name="name1" value="v1" />
  <input type="checkbox" name="name2" value="v2" />
</body>
<script>
  $(function(){
    $("input[type='checkbox']").click(function(){
      if( $("input[type='checkbox']:checked").length>0){
        //复选框选中
        $("#btnPass").show();    
        $("#btnFai").show();
      }
      else{
        //否则,效果消失。
        $("#btnPass").hide();
        $("#btnFai").hide();
      }
    })
  });
</script>
</html>

ajax

$('#btnAuditFail').click(function () {
    var asd = mmgrid.selectedRows();//获取选中的数据
    {#            var asd = mmgrid.selectedRowsIndex();//获取选中的数据的索引#}
    var device_attr = new Array();

    for(var i=0;i<asd.length;i++){
        var temp_attr = new Object();
        var device_id = asd[i].device_id;
        var msg_id = asd[i].msg_id;
        temp_attr["device_id"] = device_id;
        temp_attr["msg_id"] = msg_id;
        device_attr.push(temp_attr);
    }
    $.ajax({
        url: url.audit_fail,
        data: {"device_attr": JSON.stringify(device_attr)},
        type: 'POST',
        dataType: "json",
        success: function (data) {
            if (data.status == 0) {
                dwnotify("拒绝操作成功");
                window.location.href = url.content_audit;
            } else {
                alert(data.error);
            }
        },
        error: function () {
            alert('审核拒绝操作失败');
        }
    });
});

js不能传递数组,可以转成JSON字符串,后台接收后再loads转换 JSON.parse(data);//把json字符串转成json对象

实时获取input的值

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
  <meta name="auther" content="fq" /> 
  <title>监听输入框值的即时变化 onpropertychange oninput</title> 
  <script type="text/javascript"> 
  function immediately(){ 
    var element = document.getElementById("mytext"); 
    if("\v"=="v") { 
      element.onpropertychange = webChange; 
    }else{ 
      element.addEventListener("input",webChange,false); 
    } 
  function webChange(){ 
    if(element.value){document.getElementById("test").innerHTML = element.value}; 
    } 
  } 
  </script> 
</head> 
<body> 
  <input type="text" name="textfield" oninput="document.getElementById('webtest').innerHTML=this.value;" onpropertychange="document.getElementById('webtest').innerHTML=this.value;" /> 
  <div>您输入的值为:<span id="webtest">还未输入</span></div> 
  <br /><br /><br /><br /><br /> 
  写在JS中的示例: 
  <input type="text" name="textfield" id="mytext" /> 
  <div>您输入的值为:<span id="test">还未输入</span></div> 
  <script type="text/javascript"> 
    immediately(); 
  </script> 
</body> 
</html> 
<html> 
<head> 
  <title></title> 
</head> 
<body> 
  <input type="text" name="textfield" oninput="document.getElementById('webtest').innerHTML=this.value;" /> 
  <div>您输入的值为:<span id="webtest">还未输入</span></div> 
</body> 
</html>

响应式布局

1.媒体查询

@media (min-width: 678px)and (max-width: 800px) {
    //css样式
}
@media only screen //只针对彩屏设备
@media screen //彩屏设备
@media all //全部屏幕,可能不是彩屏

2.用bootstrap格栏控制

JS计算剩余长度

<html>
<head>
    <meta charset="UTF-8">
    <title>js计算剩余字数</title>
    <style>
        .my_area {
            height: 100px;
            width: 200px;
            overflow-x: hidden;
            overflow-y: hidden;
            resize : none; /*去除textarea右下角标识*/
        }
        .ti_shi{
            position: fixed;
            left: 176px;
            top: 117px;
            z-index: 4;
        }
    </style>
    <script language="javascript">

        function keypress2() // textarea输入长度处理
        {
            var text1 = document.getElementById("my_area").value;
            var len; //记录剩余字符串的长度
            if (text1.length >= 30) //textarea控件不能用maxlength属性,就通过这样显示输入字符数了
            {
                document.getElementById("my_area").value = text1.substr(0, 30);
                len = 30;
            } else {
                len = text1.length;
            }
            document.getElementById("ping_lun").innerText = len;
        }
    </script>
</head>
<body>
<div style="text-align:left;">
    <h3>评论内容:</h3>
    <textarea id="my_area" class="my_area" placeholder="评论内容" onkeyup="keypress2()" onblur="keypress2()"></textarea>
    <p class="ti_shi"><span id="ping_lun">0</span>/30</p>
</div>
</body>
</html>

JS数组删除元素

 Array.prototype.remove = function (obj) {
                for (var i = 0; i < this.length; i++) {
                    var temp = this[i];
                    if (!isNaN(obj)) {
                        temp = i;
                    }
                    if (temp == obj) {
                        for (var j = i; j < this.length; j++) {
                            this[j] = this[j + 1];
                        }
                        this.length = this.length - 1;
                    }
                }
            };

 Array.prototype.remove = function (n) {
            if(this.length > 0){
                return this.slice(0,n).concat(this.slice(n+1,this.length));
            }
        };

JS操作COOKIE

第一种

<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <head> 
        <script language="JavaScript" type="text/javascript"> 
            
            function addCookie(objName, objValue, objHours){//添加cookie 
                var str = objName + "=" + escape(objValue); 
                if (objHours > 0) {//为0时不设定过期时间,浏览器关闭时cookie自动消失 
                    var date = new Date(); 
                    var ms = objHours * 3600 * 1000; 
                    date.setTime(date.getTime() + ms); 
                    str += "; expires=" + date.toGMTString(); 
                } 
                document.cookie = str; 
                alert("添加cookie成功"); 
            } 
            
            function getCookie(objName){//获取指定名称的cookie的值 
                var arrStr = document.cookie.split("; "); 
                for (var i = 0; i < arrStr.length; i++) { 
                    var temp = arrStr[i].split("="); 
                    if (temp[0] == objName) 
                        return unescape(temp[1]); 
                } 
            } 
            
            function delCookie(name){//为了删除指定名称的cookie,可以将其过期时间设定为一个过去的时间 
                var date = new Date(); 
                date.setTime(date.getTime() - 10000); 
                document.cookie = name + "=a; expires=" + date.toGMTString(); 
            } 
            
            function allCookie(){//读取所有保存的cookie字符串 
                var str = document.cookie; 
                if (str == "") { 
                    str = "没有保存任何cookie"; 
                } 
                alert(str); 
            } 
            
            function $(m, n){ 
                return document.forms[m].elements[n].value; 
            } 
            
            function add_(){ 
                var cookie_name = $("myform", "cookie_name"); 
                var cookie_value = $("myform", "cookie_value"); 
                var cookie_expireHours = $("myform", "cookie_expiresHours"); 
                addCookie(cookie_name, cookie_value, cookie_expireHours); 
            } 
            
            function get_(){ 
                var cookie_name = $("myform", "cookie_name"); 
                var cookie_value = getCookie(cookie_name); 
                alert(cookie_value); 
            } 
            
            function del_(){ 
                var cookie_name = $("myform", "cookie_name"); 
                delCookie(cookie_name); 
                alert("删除成功"); 
            } 
        </script> 
    </head> 
    <body> 
        <form name="myform"> 
            <div> 
                <label for="cookie_name"> 
                    名称 
                </label> 
                <input type="text" name="cookie_name" /> 
            </div> 
            <div> 
                <label for="cookie_value"> 
                值 
                </lable> 
                <input type="text" name="cookie_value" /> 
            </div> 
            <div> 
                <label for="cookie_expireHours"> 
                多少个小时过期 
                </lable> 
                <input type="text" name="cookie_expiresHours" /> 
            </div> 
            <div> 
                <input type="button" value="添加该cookie" onclick="add_()"/><input type="button" value="读取所有cookie" onclick="allCookie()"/><input type="button" value="读取该名称cookie" onclick="get_()"/><input type="button" value="删除该名称cookie" onclick="del_()"/> 
            </div> 
        </form> 
</body> 
</html>

第二种

<script>
//设置cookie
function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = "expires="+d.toUTCString();
    document.cookie = cname + "=" + cvalue + "; " + expires;
}
//获取cookie
function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1);
        if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
    }
    return "";
}
//清除cookie  
function clearCookie(name) {  
    setCookie(name, "", -1);  
}  
function checkCookie() {
    var user = getCookie("username");
    if (user != "") {
        alert("Welcome again " + user);
    } else {
        user = prompt("Please enter your name:", "");
        if (user != "" && user != null) {
            setCookie("username", user, 365);
        }
    }
}
checkCookie(); 
</script>

第三种

<script>
//JS操作cookies方法!

//写cookies
function setCookie(c_name, value, expiredays){
     var exdate=new Date();
    exdate.setDate(exdate.getDate() + expiredays);
    document.cookie=c_name+ "=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
   }
 
//读取cookies
function getCookie(name)
{
    var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
 
    if(arr=document.cookie.match(reg))
 
        return (arr[2]);
    else
        return null;
}

//删除cookies
function delCookie(name)
{
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    var cval=getCookie(name);
    if(cval!=null)
        document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}
//使用示例
setCookie('username','Darren',30) 
alert(getCookie("username"));
</script>

url是否能访问

//判断一个url是否可以访问
function IsLoad(_url,fun){
  $.ajax({
      url:_url,
      type:"get",
      success:function(){
        //说明请求的url存在,并且可以访问
        if($.isFunction(fun)){
                fun(true);
              }
      },
      statusCode:{
        404:function(){
          //说明请求的url不存在
          if($.isFunction(fun)){
            fun(false);
          }
        }
      }
    });
}
//调用
IsLoad('www.baidu.com',function(res){
    if(res){
      alert('请求的url可以访问');
    }
});

JS框架

前端JS

    1. jquery-1.11.0
    2. bootstrap3.0.3框架
    3. FrozenUI
    4. Angularjs
    5. EJS
    6. AdminLTE1.2 bootstrap主题
    7. bootbox4.3.0消息弹窗bootstrap插件
    8. bootstrap-notify1.0消息提醒bootstrap插件
    9. Uikit框架
    10.sea.js
    11.requirejs

常用移动web框架

    1.zepto(v1.1.6)+frozenui
      http://frozenui.github.io/
      http://zeptojs.com/
    2.jquery+bootstrap
      http://www.bootcss.com/
    3.AngularJS+requirejs
      https://github.com/angular/angular.js
    4.Jquery+Jquery Mobile
      http://jquerymobile.com/
    5.Jquery+amazeUI
      http://amazeui.org/widgets/slider
    6.zepto+GMU
      http://gmu.baidu.com/
    7.zepto+app.js
      http://www.oschina.net/p/app-js
    8.zepto+weui
      http://weui.github.io/weui/
    9.zeptojs+sui mobile(组件丰富,适合开发webapp)
      http://m.sui.taobao.org/

模板引擎

    1.JsRender(原来的jquery template)
      http://www.jsviews.com/

    2.EJS
      http://www.oschina.net/p/ejs

    3.artTemplate
      https://github.com/aui/artTemplate

Bootstrap组件图标

img和input输入框不等高

在两者中加上
style="vertical-align:middle;"

回到上个页面

window.history.go(-2); // 返回上两个页面

chrome谷歌浏览器缓存查看

空白标签页输入——about:cache

[快递查询[(http://www.kuaidi100.com/openapi/api_jump.shtml)

ip查询地理位置(地图显示)

定位到当前所在区

ifequal

{% ifequal factory_uid "cd396786-579a-11e5-9e88-00a0d1eb6068" %}   # 判断两者是否相等

Jquery cookie

Jquery session

BootStrap

UiKit

jQuery WEUI

微信UI

淘宝开元UI

×    #显示成符号 ‘×’

如果在文档已完成加载后执行 document.write,整个 HTML 页面将被覆盖


上一篇 正则表达式     下一篇 cache,buffer查看
目录导航