From 1d4b3addd7a8d33e2dec71e623535e354934466a Mon Sep 17 00:00:00 2001 From: livisky <262248861@qq.com> Date: Tue, 5 Jul 2016 14:38:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BD=91=E7=AB=99=E5=89=8D?= =?UTF-8?q?=E5=8F=B0=E6=90=9C=E7=B4=A2=E6=96=87=E7=AB=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- liblog.sql | 8 +++---- src/common/config/route.js | 2 +- view/home/inc/header.html | 2 +- view/home/inc/menu.html | 18 ++++++++++++--- .../css/business/common/font-awesome.min.css | 4 ++++ .../business/fonts/fontawesome-webfont.woff2 | Bin 0 -> 66624 bytes www/static/src/css/business/index/layout.css | 21 +++++++++++++----- .../src/css/business/index/smallscreen.css | 3 ++- .../src/js/business/pagecommon/footer.js | 7 +++++- ...64\346\226\260\346\227\245\345\277\227.md" | 13 +++++++++++ 10 files changed, 62 insertions(+), 16 deletions(-) create mode 100644 www/static/src/css/business/common/font-awesome.min.css create mode 100644 www/static/src/css/business/fonts/fontawesome-webfont.woff2 create mode 100644 "\346\233\264\346\226\260\346\227\245\345\277\227.md" diff --git a/liblog.sql b/liblog.sql index fabe27c..764810c 100644 --- a/liblog.sql +++ b/liblog.sql @@ -10,7 +10,7 @@ Target Server Type : MYSQL Target Server Version : 50540 File Encoding : 65001 -Date: 2016-07-05 11:21:14 +Date: 2016-07-05 14:37:38 */ SET FOREIGN_KEY_CHECKS=0; @@ -64,7 +64,7 @@ INSERT INTO `li_article` VALUES ('131', 'javascript之单例模式', '单例模 INSERT INTO `li_article` VALUES ('129', 'HTML5.1 将于9月份正式发布 更新内容预览', 'HTML 5.1 来了。HTML 5 诞生多年以来,受到多数主流浏览器的支持。接下来,这门互联网编程语言也将走上更加规范化的道路。 W3C组织最新宣布,正在编写 HTML 5.1 的语言标准规范,预计6月中旬完成初稿,9月份正式发布。', '

据悉,相比于 HTML 5 ,即将到来的 HTML 5.1 不仅功能更强,而且更加友善,执行效率更高。HTML5,像任何已经发展了几十年的标准一样,隐含了各式各样的问题。 5.1旨在解决一些问题。

更新内容预览:

Tabbed Out

XSS

Off the Table

RIP Microformats

据介绍,HTML 5最早诞生于2008年一月,但直到2014年10月才有了第一版标准语言规范。目前,HTML 5技术被认为将取代老旧的Flash,成为新一代Web开发的主流编程语言。


', '', '网络', '2016-05-13 17:36:44', '37', '0', '1', '0', '6', 'html5', '1', '1', 'http://www.cnbeta.com/articles/493397.htm', '2', '0'); INSERT INTO `li_article` VALUES ('130', '万维网联盟正在Github上开发HTML5.1', '据外媒报道,很快,互联网上使用的主流语言就要来一次“整容”了,获悉,日前,万维网联盟(W3C)披露正在开发HTML5.1的消息,并表示初版将在今年6月中旬完成,9月则确定最终版。现在,W3C正在软件开发代码托管平台Github上展开相关开发工作,任何对数据修改器bikeshed和HTML熟悉的人也都能进行简单的代码编辑。', '

据外媒报道,很快,互联网上使用的主流语言就要来一次“整容”了,获悉,日前,万维网联盟(W3C)披露正在开发HTML5.1的消息,并表示初版将在今年6月中旬完成,9月则确定最终版。现在,W3C正在软件开发代码托管平台Github上展开相关开发工作,任何对数据修改器bikeshed和HTML熟悉的人也都能进行简单的代码编辑。

W3C表示,任何被发现的问题都值得他们关注。如果上面推荐的解决方案无法解决他们的问题,那么他们可以通过执行Pull Request从编辑或W3C职工得到方案。

W3C称,开发HTML5.1是为了让用户在网络的阅读变得更加容易,另外它还能精简未来潜在的变化程序。

如果HTML5.1的新功能有超过2个浏览器引擎不给予支持,那么W3C将选择抛弃,当这并不意味着就完全丢失,因为它还是可以以扩展的身份回归。比如一些在HTML5上的扩展,它就是由一些Google软件和User Interface信息库Web Components使用者开发。

据悉,HTML5于2014年10月正式发布标准版,不过它的开发工作却早在2008年的1月就已经开始了。


', 'static/upload/pics/5/17/2016k94aiko3_oyOc6piV-KNkF95.jpg', '网络', '2016-05-17 11:07:13', '70', '1', '1', '0', '6', '', '1', '1', '', '2', '0'); INSERT INTO `li_article` VALUES ('128', 'javascript常见数组操作整理', '数组常见操作包含了 增、删、查、改、插入、交集、并集', '

数组常见操作包含了 增、删、查、改、插入、交集、并集,现整理如下:

\n

1、数组整体元素修改

\n
        //map,给数组每个元素加1 输出[1,2,3]\n        $.map([0,1,2],function(n){\n            return n+1;\n        })\n
\n

2、 数组筛选

\n
        $.map([0,1,2],function(n){\n            return n>0?n+1:null\n        })\n        //[2,3]\n
\n

3、jquery 元素转数组

\n
        $(\"li\").toArray()\n        $.makeArray($(\"li\"))\n
\n

4、获取两个数组中相同部分或者不同部分

\n
        //去掉true则显示相同部分,保留true则显示不同部分\n        var a=[1,2,3,5,6,3,7,12],\n             b=[1,3,5,12]\n\n        $.grep(a,function(n,i){\n             if(b.indexOf(n)>=0)\n                 return n\n        },true);\n        //[2, 6, 7]\n
\n

5、数组去重并倒序排序

\n
        var a=[1,2,3,5,6,3,7,12];\n        $.unique(a)\n        //[12, 7, 6, 5, 3, 2, 1]\n
\n

6、数组排序

\n
        var arr=[1,34,5,8,4,9,12]\n        arr.sort(function(a,b){\n            return a-b;\n        });\n        //顺序:a-b   [1, 4, 5, 8, 9, 12, 34]\n        //倒序:b-a   [34, 12, 9, 8, 5, 4, 1]\n
\n

7、数组截取slice

\n
        var arr=[1,34,5,8,4,9,12];\n            arr.slice(2,4) // [5, 8]\n        //arr  输出 [1, 34, 5, 8, 4, 9, 12]\n
\n

8、数组插入、删除splice(需明确位置)

\n
        var arr=[1,34,5,8,4,9,12];\n        //删除\n             arr.splice(2,4)\n            //arr  输出[1, 34, 12]\n        //替换\n            arr.splice(1,2,3,4)\n            //arr  输出[1, 3, 4, 8, 4, 9, 12]\n        //插入\n            arr.splice(2,0,44)\n        //arr  输出[1, 34, 44, 5, 8, 4, 9, 12]\n
\n

9、数组遍历

\n
        var members=[\"1\",\"2\",\"3\"];\n        $.each(members,function(i,item){\n            console.log(item);\n        });\n        //如何跳出当前的each循环\n        //return false;——跳出所有循环;相当于 javascript 中的 break 效果。\n        //return true;——跳出当前循环,进入下一个循环;相当于 javascript 中的 continue 效果。\n
\n

10、jQuery根据元素值删除数组元素的方法

\n
        var arr = [\'a\',\'b\',\'c\',\'d\'];\n        arr.splice($.inArray(\'c\',arr),1);\n        console.log(arr);\n        //[\"a\", \"b\", \"d\"]\n
\n

11、常见的数组操作

\n
        push、pop、shift、unshift、concat\n
\n

12、数组操作兼容性

\n
        IE8下\n        $.inArray 代替 indexOf\n\n        $.grep代替Array.prototype.filter\n
\n

13、常见数组操作案例:

\n

1、jquery实现从数组移除指定的值

\n
        function delItem(arr,m)\n        {\n                return $.grep(arr,function(n,i){\n                    return n!=m\n                });\n        }\n        var a=[1,2,3,5,6,3,7,12];\n            delItem(a,3)\n
\n

或者

\n
        function delItem(arr,m)\n            {\n                arr.splice($.inArray(m,arr),1);\n                return arr\n            }\n        var arr = [\'a\',\'b\',\'c\',\'d\'];\n            delItem(arr,\"c\")\n
\n

2、jquery实现从数组移除指定的数组

\n
        function delArray(arr,delArr)\n        {\n                return $.grep(arr,function(n,i){\n                    if( delArr.indexOf(n)>=0)\n                    return n\n                },true);\n        }\n        var a=[1,2,3,5,6,3,7,12],\n            b=[5,7];\n            delArray(a,b)\n
\n

3、jquery找出2个数组同有的部分

\n
        function findCommonArray(arr,delArr)\n        {\n                return $.grep(arr,function(n,i){\n                    if( delArr.indexOf(n)>=0)\n                        return n\n                });\n        }\n        var a=[1,2,3,5,6,3,7,12],\n            b=[5,7,9];\n            findCommonArray(a,b)\n


', 'static/upload/pics/5/17/2016YuKqGjR0liiRzXoofEQPpjld.jpg', '阿华田', '2016-05-17 10:58:44', '59', '1', '1', '1', '7', 'js,jquery', '1', '1', '', '1', '0'); -INSERT INTO `li_article` VALUES ('126', 'thinkjs配置邮件—基于nodemailer模块', 'Nodemailer 是一个简单易用的 Node.JS 邮件发送模块(通过 SMTP,sendmail,或者 Amazon SES),支持 unicode,你可以使用任何你喜欢的字符集。', '

Nodemailer 是一个简单易用的 Node.JS 邮件发送模块(通过 SMTP,sendmail,或者 Amazon SES),支持 unicode,你可以使用任何你喜欢的字符集。

\n

安装nodemailer模块

\n
npm install nodemailer@0.7.1 --save\n
\n

注意1:nodejs默认安装最新的nodemailer版本,如果版本和nodejs版本不匹配则会提示你下降版本,本例的适配版本是0.7.1

\n
\n

邮件账号配置

\n

在src/common/config/下新建mail.js,配置代码如下:

\n
export default {\n  //发送邮件配置\n  host:\"smtp.qq.com\",\n  port: 465,\n  domains:\'[\"qq.com\"]\',\n  account:\'262248861@qq.com\',\n  pass: \"XXXXXXXX\",\n  from:\"262248861@qq.com\",\n  route_on: true,\n  encoding: \"utf-8\"\n};\n
\n
\n

注意2:QQ邮箱的密码不是你的登录密码,而是在设置/账户里开启SMTP后腾讯给出的一串第三方登录密码

\n
\n

新建mail控制器,在controller里配置:

\n
var nodemailer  = require(\"nodemailer\");\nlet mailer=think.config(\"mail\");\nvar smtpTransport = nodemailer.createTransport(\"SMTP\", {\n    host: mailer.host,\n    secureConnection: true,\n    port: mailer.port,\n    requiresAuth: true,\n    domains: mailer.domains,\n    auth: {\n        user: mailer.account, // 账号\n        pass: mailer.pass // 密码\n    }\n});\nsmtpTransport.sendMail({\n    from: mailer.account,\n      to: \"390039626@qq.com,livisky@163.com\", // 收件列表\n subject: \'Node.JS通过SMTP协议从QQ邮箱发送邮件\',\n    html: \'have a try!\'\n},function(err, res) {\n    console.log(err, res);\n});\n
\n

刷新页面,即可完成邮件的发送。

\n

在前台页面,controller方法里可以是一个连接,当前台点击此连接时(发送邮件),自动发送邮件

\n

常见问题

\n

1、Invalid login - 535 Authentication failed
此项为密码错误,详见注意2
2、454 Authentication failed, please open smtp flag first!\'
请在QQ邮箱 -> 设置 -> 帐户 -> 开启服务:POP3/SMTP服务


', 'static/upload/pics/5/17/2016BK15AZ8w0jz2-i70Fpb5AXzH.jpg', '前端汇', '2016-05-17 16:26:44', '80', '1', '1', '1', '3', 'thinkjs,nodejs', '1', '1', '', '3', '0'); +INSERT INTO `li_article` VALUES ('126', 'thinkjs配置邮件—基于nodemailer模块', 'Nodemailer 是一个简单易用的 Node.JS 邮件发送模块(通过 SMTP,sendmail,或者 Amazon SES),支持 unicode,你可以使用任何你喜欢的字符集。', '

Nodemailer 是一个简单易用的 Node.JS 邮件发送模块(通过 SMTP,sendmail,或者 Amazon SES),支持 unicode,你可以使用任何你喜欢的字符集。

\n

安装nodemailer模块

\n
npm install nodemailer@0.7.1 --save\n
\n

注意1:nodejs默认安装最新的nodemailer版本,如果版本和nodejs版本不匹配则会提示你下降版本,本例的适配版本是0.7.1

\n
\n

邮件账号配置

\n

在src/common/config/下新建mail.js,配置代码如下:

\n
export default {\n  //发送邮件配置\n  host:\"smtp.qq.com\",\n  port: 465,\n  domains:\'[\"qq.com\"]\',\n  account:\'262248861@qq.com\',\n  pass: \"XXXXXXXX\",\n  from:\"262248861@qq.com\",\n  route_on: true,\n  encoding: \"utf-8\"\n};\n
\n
\n

注意2:QQ邮箱的密码不是你的登录密码,而是在设置/账户里开启SMTP后腾讯给出的一串第三方登录密码

\n
\n

新建mail控制器,在controller里配置:

\n
var nodemailer  = require(\"nodemailer\");\nlet mailer=think.config(\"mail\");\nvar smtpTransport = nodemailer.createTransport(\"SMTP\", {\n    host: mailer.host,\n    secureConnection: true,\n    port: mailer.port,\n    requiresAuth: true,\n    domains: mailer.domains,\n    auth: {\n        user: mailer.account, // 账号\n        pass: mailer.pass // 密码\n    }\n});\nsmtpTransport.sendMail({\n    from: mailer.account,\n      to: \"390039626@qq.com,livisky@163.com\", // 收件列表\n subject: \'Node.JS通过SMTP协议从QQ邮箱发送邮件\',\n    html: \'have a try!\'\n},function(err, res) {\n    console.log(err, res);\n});\n
\n

刷新页面,即可完成邮件的发送。

\n

在前台页面,controller方法里可以是一个连接,当前台点击此连接时(发送邮件),自动发送邮件

\n

常见问题

\n

1、Invalid login - 535 Authentication failed
此项为密码错误,详见注意2
2、454 Authentication failed, please open smtp flag first!\'
请在QQ邮箱 -> 设置 -> 帐户 -> 开启服务:POP3/SMTP服务


', 'static/upload/pics/5/17/2016BK15AZ8w0jz2-i70Fpb5AXzH.jpg', '前端汇', '2016-05-17 16:26:44', '81', '1', '1', '1', '3', 'thinkjs,nodejs', '1', '1', '', '3', '0'); INSERT INTO `li_article` VALUES ('127', 'Puer安装及前端应用', 'puer是一个可以实时编辑刷新的前端服务器。特性一览:\n提供一个当前或指定路径的静态服务器\n所有浏览器的实时刷新:编辑css实时更新(update)页面样式,其它文件则重载(reload)页面\n提供简单熟悉的mock请求的配置功能,并且配置也是自动更新。', '

Puer安装及前端应用

\n
\n

Puer是一个可以实时编辑刷新的前端服务器。特性一览:
提供一个当前或指定路径的静态服务器
所有浏览器的实时刷新:编辑css实时更新(update)页面样式,其它文件则重载(reload)页面
提供简单熟悉的mock请求的配置功能,并且配置也是自动更新。
可用作代理服务器,调试开发既有服务器的页面,可与mock功能配合使用
集成了weinre,并提供二维码地址,方便移动端的调试
可以作为connect中间件使用(前提是后端为nodejs,否则请使用代理模式)

\n
\n
一、安装:
\n

安装NodeJS后,cmd输入命令行

\n
npm install puer -g\n

输入puer -h 查看帮助,验证是否安装成果

\n
puer -h\n
二、应用场景
\n
场景1:实时编辑刷新的前端服务器
\n

1、新建任意文件夹,cmd进入目录,输入puer
2、自动打开http://localhost:8000页面(端口可以 -p 8001参数进行控制)
3、新建index.html,实时修改,自动刷新

\n

<br/>

\n
场景2:便捷模拟ajax数据接口,快速开发小型应用
\n

1、新建router.js并添加代码

\n
module.exports = {\n  \"GET /v1/posts/:id\": function(req, res, next){\n    res.send({\n      title: \"title changed\",\n      content: \"tow post hahahah\"\n    })\n  },\n  \"PUT /v1/posts/:id\": function(){\n  },\n  \"POST /v1/posts\": function(){\n  },\n  \"DELETE /v1/posts/:id\": function(){\n  }\n}\n
\n

2、输入命令:

\n
puer -a route.js\n

3、输入 http://localhost:8000/v1/posts/1即可访问接口返回模拟的Json数据

\n
{\n      title: \"title changed\",\n      content: \"tow post hahahah\"\n}\n

<br/>

\n
场景3:集成了weinre,实现远程调试
\n

cmd输入

\n
puer -i\n

1、手机连接内网,访问本地ip地址或扫描puer提供的二维码
2、新窗口打开(或点击nav to weinre terminal)http://localhost:9001/client/#anonymous 即可进行远程调试


', 'static/upload/pics/5/17/2016uzQyW6RL5076-m4s9xJPdAb9.jpg', '前端汇', '2016-05-17 11:02:05', '51', '1', '1', '1', '13', 'puer,nodejs', '1', '1', '', '3', '0'); INSERT INTO `li_article` VALUES ('124', 'thinkjs开启csrf示例教程', '什么是CSRF? 就是防止批量、重复地模拟表单提交,达到恶人的目的。所有项目,考虑安全问题,最好所有提交请求都加一下。某公司因为注册时候的短信验证码请求时未加,导致被人利用发送好几万条短信...', '

什么是CSRF?

\n
\n

CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。。。。详见百度

\n
\n

通俗地讲:就是防止批量、重复地模拟表单提交,达到恶人的目的。所有项目,考虑安全问题,最好所有提交请求都加一下。某公司因为注册时候的短信验证码请求时未加,导致被人利用发送好几万条短信...

\n

thinkjs如何配置?

\n

贴上官方文档提供的配置代码:

\n
\n

开启 CSRF

\n

配置 hook 文件 src/common/config/hook.js,添加如下的配置:

\n
export default {\n  logic_before: [\"prepend\", \"csrf\"]\n}\n

CSRF 默认的配置如下,可以在配置文件 src/common/config/csrf.js 中修改:
(在 src/common/config下新建csrf.js文件贴上代码)

\n
export default {\n  session_name: \"__CSRF__\", // Token 值存在 session 的名字\n  form_name: \"__CSRF__\", // CSRF 字段名字,从该字段获取值校验\n  errno: 400, //错误号\n  errmsg: \"token error\" // 错误信息\n};\n

如此,thinkjs端的配置完成了,注意两个配置项:session_name: \"CSRF\",和form_name: \"CSRF\"。

\n
\n

应用场景:

\n

假如后台登录需要添加csrf:
在controller/login.js的session里获取csrf值,并assign到前台页面

\n
  async indexAction(){\n      this.assign(\"title\",\"管理员登陆\")\n      let csrf=await this.session(\"__CSRF__\");\n      this.assign(\"csrf\",csrf);\n      //判断是否登陆\n            let data=await this.session(\'userInfo\');\n            if(think.isEmpty(data)){\n                  return  this.display();\n                }else{\n                  return  this.redirect(\"/admin/index\");\n            }\n       //判断是否登陆 \n  }\n

这样前台页面就能获取到CSRF的值了
在前台login.html页面里可以弄个隐藏域来放CSRF值

\n
 <form>\n   <div class=\"form-group\">\n    <label for=\"username\">用户名</label>\n    <input type=\"text\" class=\"form-control\" id=\"username\" placeholder=\"用户名\">\n   <input type=\"hidden\" id=\"csrf\" value=\"<%=csrf%>\">\n </div>\n</form>\n

然后在前台表单提交的时候,传输的数据添加CSRF参数

\n
$(\"#loginBtn\").on(\'click\', function () {\n    $.ajax(\n    {\n        url: \'http://localhost:8361/login/dologin\',\n\n        data: {\n            username: $(\"#username\").val(),\n            password: $(\"#password\").val(),\n            __CSRF__: $(\"#csrf\").val()\n        },\n        type: \'POST\',\n        success: function (json) {\n\n            if (json.errno === 0) {\n\n                alert(json.errmsg);\n\n                window.location.href = \"/admin/index\";\n            } else {\n                alert(json.errmsg);\n            }\n        }\n    }\n    )\n})\n

如此,CSRF的简单应用就完成了。

\n

进阶用法,可以考虑在controller/base.js里统一assign系统的CSRF值,这样所有页面都有了。CSRF值写在前台的公用头部的meta标签里,其他页面<%include inc/header.html%>,然后表单提交的时候获取一下并提交CSRF值。(个人想法)


', 'static/upload/pics/5/17/2016LyfWg_NSkyBQytxInLcGMc0G.jpg', '前端汇', '2016-05-17 11:10:54', '92', '1', '1', '1', '3', 'csrf,thinkjs', '0', '1', '', '3', '0'); INSERT INTO `li_article` VALUES ('125', 'nodejs的守护进程pm2的使用方法', '什么是pm2?pm2 是一个带有负载均衡功能的Node应用的进程管理器。当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的。', '

什么是pm2?

\n
\n

pm2 是一个带有负载均衡功能的Node应用的进程管理器。当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的。

\n
\n

安装pm2

\n

进入项目目录,输入命令

\n
npm install pm2 --save\n
\n

安装好项目的pm2模块后,在node_modules目录下就会多一个pm2模块

\n

pm2使用

\n

新建pm2.json文件

\n
{\n  \"apps\": [{\n    \"name\": \"liblog\",\n    \"script\": \"npm start www/production.js\",\n    \"cwd\": \"E:/jsout/liblog\",\n    \"max_memory_restart\": \"1G\",\n    \"autorestart\": true,\n    \"node_args\": [],\n    \"args\": [],\n    \"env\": {\n\n    }\n  }]\n}\n
\n

cwd为项目文件夹路径
script为项目入口文件
其余不多做解释...

\n

最后执行pm2开始命令

\n
   pm2 start pm2.json\n   或\n   pm2 startOrReload pm2.json\n   或\n   pm2 startOrGracefulReload pm2.json\n
\n

常用命令

\n
pm2 status +项目名或id\npm2 list\npm2 delete +项目名或id\npm2 delete all\n


', 'static/upload/pics/5/17/2016COmC5fwujjRSHLnwBvHezV8p.jpg', '前端汇', '2016-05-17 10:56:00', '36', '1', '1', '1', '3', 'nodejs,thinkjs', '1', '1', '', '3', '0'); @@ -101,10 +101,10 @@ INSERT INTO `li_article` VALUES ('161', 'H5网页判断手机横屏或是竖屏' INSERT INTO `li_article` VALUES ('162', '整站快速变黑白灰的方法', '经常看到一些网站遇到重大灾害事故的时候,选择默哀,会把网站的整体颜色变成黑白灰,这种技术其实并不复杂,仅仅是通过滤镜就可实现,下面我把我常用的方法分享给大家。', '

经常看到一些网站遇到重大灾害事故的时候,选择默哀,会把网站的整体颜色变成黑白灰,这种技术其实并不复杂,仅仅是通过滤镜就可实现,下面我把我常用的方法分享给大家。\n

\n

在css文件中插入以下代码:

html {\nfilter:progid:DXImageTransForm.Microsoft.BasicImage(grayscale=1);\n-webkit-filter: saturate(0);\n} 

保存刷新,你会发现页面瞬间变成了黑白灰基调。当然我们也可以在html文档中直接添加:

<style type=”text/css”>\nhtml{\nfilter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);\n}\n</style>

效果是一样的,通过css滤镜把网页颜色改变。

值得注意的是,如果您的网站中有flash动画的话,它的颜色不会改变,这时您可以在在FLASH代码的<object …>和</object>之间插入:

<param value=”false” name=”menu”/>\n<param value=”opaque” name=”wmode”/> 



', '', '前端汇', '2016-05-20 13:52:29', '10', '0', '0', '0', '5', '', '0', '1', '', '1', '0'); INSERT INTO `li_article` VALUES ('163', 'CSS3的属性选择器', 'CSS3中新增了许多选择器,今天给大家说说CSS3的属性选择器。', '

CSS3中新增了许多选择器,今天给大家说说CSS3的属性选择器。\n

\n

与CSS2相比,CSS3新增了3种属性选择器:[attr^=value]、[attr$=value]、[attr*=value];分别来讲解一下。

一、[attr^=value]属性选择器

大家如果接触过正则表达式的话,应该知道^符号的意思,是表示开头,没错,这里也是表示开头的意思,意思就是选择属性名attr的开头值为value的元素!

举个例子:

<style type=\"text/css\">\n[class^=tea]{width:200px; height:200px;}  /*此选择器表示选择class开头字符串为tea的元素*/\n</style>\n\n<div class=\"teacher\">我的class是teacher</div>\n<div class=\"tea\">我的class是tea</div>\n<div class=\"teach\">我的class是teach</div>\n<div class=\"aaa\">我的class是aaa</div>

这样会选择前三个元素,而不会选择最后一个元素。

二、[attr$=value]属性选择器

相比较前一个,这一个就很容易理解了,$符号就代表结尾,这里意思是选择属性名attr的结尾值为value的元素!

例子:

<style type=\"text/css\">\n[class$=er]{width:200px; height:200px;}  /*此选择器表示选择class结尾字符串为er的元素*/\n</style>\n\n<div class=\"teacher\">我的class是teacher</div>\n<div class=\"tea\">我的class是tea</div>\n<div class=\"teach\">我的class是teach</div>\n<div class=\"aaa\">我的class是aaa</div>

这样就会选择class为teacher的div。

三、[attr*=value]属性选择器

最后这一个和前面两个的区别是符号换成了*,这个代表通配符的意思,意思是选择属性名attr的值包含value的元素!

<style type=\"text/css\">\n[class$=ch]{width:200px; height:200px;}  /*此选择器表示选择class包含字符串为ch的元素*/\n</style>\n\n<div class=\"teacher\">我的class是teacher</div>\n<div class=\"tea\">我的class是tea</div>\n<div class=\"teach\">我的class是teach</div>\n<div class=\"aaa\">我的class是aaa</div>

这样就会选择class为teacher和class为teach的两个div。

这三种属性选择器大家如果用的熟练的话会对提高工作效率有很大帮助。


', '', '前端汇', '2016-05-20 13:55:57', '11', '0', '0', '0', '0', '', '0', '1', '', '0', '0'); INSERT INTO `li_article` VALUES ('166', 'i创中国·创新医疗专场', '时间:05-21 13:00 - 17:00\n\n地点:杭州 - 城中香格里拉大酒店', '

时间05-21 13:00 - 17:00

地点:杭州 - 城中香格里拉大酒店

活动内容

从一名创业者到企业家,你需要跨越的不仅仅是盈利额的攀升,更是用新思维来定义旧领域的过程。从传统到新锐,创新医疗者能做的不仅仅是运营一个项目发明一个产品,而是颠覆医疗霸权,拯救更多的生命。

5月21日,由i创中国、浙商传媒(《浙商》杂志)主办,医路演联合主办,永炜投资特别赞助的i创中国·2016浙商创新创业大赛创新医疗专场即将拉开帷幕。美国硅谷行业大咖与众多医疗行业创新创业者将齐聚杭州,共话医疗产业的现状和趋势。

丨海外大咖丨

演讲主题:硅谷最新移动医疗的现状和趋势

Skip Fleshman

【大咖简介】

硅谷著名的专注于投资早期阶段的移动医疗、细胞治疗、医疗大数据分析等领域的风投公司AMV创始合伙人,斯坦福大学孵化器StartX、硅谷最著名的移动医疗孵化器Rock Health以及波士顿儿童医院的顾问。

曾投资公司:HealthTap, Reify Health, Evidation Health, 1DocWay, Lark, Arterys,Welkin Health, WellDoc, Ooma, Kii, LiquidM, RallyPoint 和Icon Aircraft。其中,退出案例包括:Skybox、Digisec、Chimerix、1Docway、StrataVia、Ooma and Provade等

丨优质路演项目丨

海外项目一:VR治疗青光眼

项目来自于nGoggle,一家位于美国加州圣地亚哥的研发便携式的人脑—电脑交互诊断工具的公司,专注于诊断青光眼(失明的主要诱因之一)、黄斑变性眼科疾病等其他眼科疾病,以及神经退行性疾病及其他神经失调疾病。以OculusRift硬件结合脑电图来测量神经系统反应及状态变化,将其转化为视觉刺激的原理,实现客观测量疾病发展且将诊断缩短至数月。

海外项目二:外骨骼机器人

项目来自于US bionic公司,创始人Dr.kazarooni博士是国际外骨骼机器人顶尖专家,加州大学伯克利分院教授,已研发出世界首款军用外骨骼(美军方采购后被洛克希德马丁公司收购),工业用机器人,医疗用机器人。

目前正处于研发的医用、工业用外骨骼机器人可以模块化,整机重量只有竞品一半,成本只有竞品三分之一。在迪拜国际人工智能机器人大赛总获得金牌奖项,奖金100万美元。

去官网报名


', '', '网络', '2016-05-21 13:21:13', '14', '0', '1', '0', '14', '', '0', '1', '', '6', '0'); -INSERT INTO `li_article` VALUES ('165', 'nginx下如何禁止未绑定域名访问', '网站初建,对nginx配置也不怎么懂,今日查看网站的百度收录排名,突然发现有一个一模一样的网站出现,连内容和logo也一样,并且排名和收录都比自己的网站高。仔细一看第一反应就是他的域名解析到了我的服务器IP上,应该是nginx上配置问题,没有进行过滤。', '

背景

\n

网站初建,对nginx配置也不怎么懂,今日查看网站的百度收录排名,突然发现有一个一模一样的网站出现,连内容和logo也一样,并且排名和收录都比自己的网站高。仔细一看第一反应就是他的域名解析到了我的服务器IP上,应该是nginx上配置问题,没有进行过滤。网上查了一下原因和解决方法,总结如下:

\n

方式一

\n

禁止未绑定的域名解析到服务器,跳转到403错位

\n
server{\n    listen 80 default_server;\n    server_name _;\n    return 403;\n}\n

其实这个名字没有什么特别的,它仅仅是一个许多无效的域名中的一个代表,与任何真实的名字永远不会相交。其它无效的名称,如“ - “ 和” !@# “也可同样使用。
default_server:nginx的虚拟主机是通过HTTP请求中的Host值来找到对应的虚拟主机配置,如果找不到呢?那 nginx就会将请求送到指定了 default_server 的 节点来处理

\n

对于未绑定的域名指向你的服务器时,匹配不到你配置的虚拟主机域名后,会默认使用这个虚拟主机,然后直接返回404。

\n

方式二

\n

把这些流量收集起来,导入到自己的网站,以其人之道还治其人之身

\n
server{\n    listen 80 default_server;\n    server_name _;\n    rewrite ^(.*) http://www.jsout.com permanent;\n}\n

总结

\n

其实这人也挺无聊的。不过,对于我自身,也加深了解了对nginx的配置。看来对于一个前端工程师来说,多了解一下nginx等服务器的配置也是必要的,成长总是在磕碰之后。

', '/static/upload/pics/5/21/2016wD40s7O1PqoLJJx1XOSiJ9O0.jpg', '前端汇', '2016-05-21 13:04:50', '39', '1', '1', '1', '16', 'nginx', '0', '1', '', '1', '0'); +INSERT INTO `li_article` VALUES ('165', 'nginx下如何禁止未绑定域名访问', '网站初建,对nginx配置也不怎么懂,今日查看网站的百度收录排名,突然发现有一个一模一样的网站出现,连内容和logo也一样,并且排名和收录都比自己的网站高。仔细一看第一反应就是他的域名解析到了我的服务器IP上,应该是nginx上配置问题,没有进行过滤。', '

背景

\n

网站初建,对nginx配置也不怎么懂,今日查看网站的百度收录排名,突然发现有一个一模一样的网站出现,连内容和logo也一样,并且排名和收录都比自己的网站高。仔细一看第一反应就是他的域名解析到了我的服务器IP上,应该是nginx上配置问题,没有进行过滤。网上查了一下原因和解决方法,总结如下:

\n

方式一

\n

禁止未绑定的域名解析到服务器,跳转到403错位

\n
server{\n    listen 80 default_server;\n    server_name _;\n    return 403;\n}\n

其实这个名字没有什么特别的,它仅仅是一个许多无效的域名中的一个代表,与任何真实的名字永远不会相交。其它无效的名称,如“ - “ 和” !@# “也可同样使用。
default_server:nginx的虚拟主机是通过HTTP请求中的Host值来找到对应的虚拟主机配置,如果找不到呢?那 nginx就会将请求送到指定了 default_server 的 节点来处理

\n

对于未绑定的域名指向你的服务器时,匹配不到你配置的虚拟主机域名后,会默认使用这个虚拟主机,然后直接返回404。

\n

方式二

\n

把这些流量收集起来,导入到自己的网站,以其人之道还治其人之身

\n
server{\n    listen 80 default_server;\n    server_name _;\n    rewrite ^(.*) http://www.jsout.com permanent;\n}\n

总结

\n

其实这人也挺无聊的。不过,对于我自身,也加深了解了对nginx的配置。看来对于一个前端工程师来说,多了解一下nginx等服务器的配置也是必要的,成长总是在磕碰之后。

', 'static/upload/pics/5/21/2016wD40s7O1PqoLJJx1XOSiJ9O0.jpg', '前端汇', '2016-05-21 13:04:50', '39', '1', '1', '1', '16', 'nginx', '0', '1', '', '1', '0'); INSERT INTO `li_article` VALUES ('167', '2016年房产消费创投趋势探讨---IT桔子沙龙', '时间: 05-21 13:30 - 17:00\n\n地点:上海 - 江湾体育场', '

2016年房产消费创投趋势探讨---IT桔子沙龙

时间: 05-21 13:30 - 17:00

地点:上海 - 江湾体育场

活动内容

房产消费作为互联网+中的巨额市场一直备受关注,围绕房产的O2O覆盖租房、买房、装修几大领域,再加上创业火热、小微企业增多,商业地产、办公室租房、众创空间这类服务也纷纷登场。房产的客单价足够高,围绕房贷、分期支付的消费金融也在这个领域得到了更快的发展。

刚刚过去四分之一的2016年,联合办公空间纷纷融资,住百家、美房云客等房产企业挂牌新三板,魔方公寓迎来C轮3亿美金融资,链家扑朔迷离的巨额融资后启动上市计划,然而不管是孵化器、亦或是长租、短租公寓,火热的背后同样备受质疑。

如今的房产+互联网是否正在经历寒冬?房产交易型创业公司如何与传统大平台竞争?在重度依赖线下的行业中如何打造出新的模式?投资人眼中房产行业还存在哪些创业机会?本期IT桔子沙龙,我们将邀请创业者和投资人共同探讨。

议程:

13:30-14:00签到入场

14:00-14:15活动介绍及开场

14:15-14:45 IT桔子盘点房产领域创业投资数据信息

14:45-16:45创业公司主题演讲+互动问答

16:45-17:30投资人分享:投资房产消费领域的观点和看法

去官网报名


', '', '网络', '2016-05-21 13:24:42', '12', '0', '1', '0', '14', 'IT桔子沙龙', '0', '1', '', '6', '0'); INSERT INTO `li_article` VALUES ('168', '亚杰商会第10期融资对对碰', '时间:05-24 13:30 - 17:00\n\n地点:北京 - 中关村创业大街昊海楼2层', '

时间05-24 13:30 - 17:00

地点:北京 - 中关村创业大街昊海楼2层

活动内容

第九期的融资对对碰,涌现了大波优质项目,目前已有两个项目通过亚杰平台成功对接到投资机构!如今亚杰商会第十期融资对对碰如期而至,我们依然采取项目路演10分钟+投资人提问5分钟的形式!

【参加项目】

旅行管家            

用线上APP线下呼叫中心连接用户与商家,解决目的地商户诚信,用户体验两个痛点,打破传统商业规则形成闭环,让中国旅游升级迭代。全程围绕用户提供最新最精准的目的地吃购游等服务,让您更好的了解当地风土人情,让客人的精力全部绽放在旅程中最精华的时刻。

易售后                  

中小企业售后服务云平台,一站式解决企业售后服务难题。平台要实现的目标是:让企业的售后服务更简单、更便捷、更高效、成本更低廉。

U享生活

一款中小型商户轻运营SAAS平台,U享可帮助中小型商户引流推广,提升复购率,运营老客户。降低商户在运营维护中的人力以及运营推广成本。

Artplane

一个艺术品,设计师服务,艺术家居全产业链条经纪+电商平台。我们帮助推广艺术家+设计师+设计家居,帮助售卖艺术品和设计师服务,设计家居,帮助他们赚钱,变现盈利。

帮助艺术家和室内设计师,打造经纪推广服务平台。

联尚优品

一家聚合全球时尚产品跨境电商B2B实时交易平台,我们主要核心模式是1、服务担保(实时共享商品、配送、结算闭环交易服务) 2、颠覆低效(打破传统B2B批量订单模 式,以单品实时交易模式) 3磁力吸引(吸引更多海外优质商户,盘活闲置货源库存)

救心EXPRESS

一个急性心梗救治及随访管理平台,是根据国家行政文件开发的手机APP,实现了临床路径指引及数据采集和随访平台,帮助医院建立心梗救治的数据库,利于医院申请胸痛中心,同时也作为医疗企业进入市场和市场渗透的入口。

目前APP开发完成,推广团队基本建立。项目创始人医生出身,超过10年外资医药公司市场和销售管理经验,并在在行业学会工作过3年,目前带领团队管理全国心梗项目。

人间禅境

3d养成类手游,创意玩法,创新思维,虚拟现实+物联网,把虚拟物品带到现实中来, 虚拟与现实结合,云存储结合游戏,记忆人生轨迹。 根据人性化思维打造全新的,立体的,新颖的游戏模式。 最大限度的提升画面品质,试图做到三点创新,

即:游戏玩法创新,云存储形式创新,b2c模式创新

去官网报名


', '', '前端汇', '2016-05-23 14:05:34', '3', '0', '1', '0', '14', '亚杰商会', '0', '1', '前端汇', '6', '0'); -INSERT INTO `li_article` VALUES ('169', '21InnoTalk|爱回收创始人讲述创业过程中的加减法', '时间: 05-24 14:00 - 16:00\n\n地点:上海 - 杨浦区锦嘉路88号', '

InnoTalk|爱回收创始人讲述创业过程中的加减法

时间: 05-24 14:00 - 16:00

地点:上海 - 杨浦区锦嘉路88号

活动内容

8年前的一个创业灵感;5年前抓住智能手机风口业务大胆转型;从十几个人发展到上千人的团队;用户上千万,已成长为手机回收行业的领导者;爱回收创始人陈雪峰讲述创业过程中的加减法。

在数学中最容易的加减法,在现实中却是最难做出的选择。创业公司在发展过程中总会有各种机会和风险,而高层在做决策时,可能会因为贪心或胆怯而不敢做赌注,导致公司出现平行发展而纵深不足的情况。这种时候会做加减法便显得格外重要。找准方向,坚持往一个可以深耕或自己最笃定的方向做加法,而在其他精力不足或判断不准的方向做减法,将会帮助创业公司快速突围。

爱回收,从8年前的社会热点“别针换别墅”产生的创业灵感,两年多艰难摸索,5年前抓住智能手机风口,业务转型为二手领域的回收。转型后很快获得晨兴资本的A轮投资,一路发展顺利,现已发展到上千人的规模,2015年8月,爱回收网完成6000万美元的C轮融资,与京东开展战略合作,上了一个新的台阶。

爱回收在发展中是如何做加减法的?在业务和商业模式层面,是如何使用加减法法则的?

5月24日(周二)下午,来IPO club听InnoSpace创业导师、爱回收创始人陈雪峰讲述“创业过程中的加减法”。

去官网报名


', '', '前端汇', '2016-06-30 20:05:48', '3', '0', '1', '0', '14', '', '1', '1', '', '6', '0'); +INSERT INTO `li_article` VALUES ('169', '21InnoTalk|爱回收创始人讲述创业过程中的加减法', '时间: 05-24 14:00 - 16:00\n\n地点:上海 - 杨浦区锦嘉路88号', '

InnoTalk|爱回收创始人讲述创业过程中的加减法

时间: 05-24 14:00 - 16:00

地点:上海 - 杨浦区锦嘉路88号

活动内容

8年前的一个创业灵感;5年前抓住智能手机风口业务大胆转型;从十几个人发展到上千人的团队;用户上千万,已成长为手机回收行业的领导者;爱回收创始人陈雪峰讲述创业过程中的加减法。

在数学中最容易的加减法,在现实中却是最难做出的选择。创业公司在发展过程中总会有各种机会和风险,而高层在做决策时,可能会因为贪心或胆怯而不敢做赌注,导致公司出现平行发展而纵深不足的情况。这种时候会做加减法便显得格外重要。找准方向,坚持往一个可以深耕或自己最笃定的方向做加法,而在其他精力不足或判断不准的方向做减法,将会帮助创业公司快速突围。

爱回收,从8年前的社会热点“别针换别墅”产生的创业灵感,两年多艰难摸索,5年前抓住智能手机风口,业务转型为二手领域的回收。转型后很快获得晨兴资本的A轮投资,一路发展顺利,现已发展到上千人的规模,2015年8月,爱回收网完成6000万美元的C轮融资,与京东开展战略合作,上了一个新的台阶。

爱回收在发展中是如何做加减法的?在业务和商业模式层面,是如何使用加减法法则的?

5月24日(周二)下午,来IPO club听InnoSpace创业导师、爱回收创始人陈雪峰讲述“创业过程中的加减法”。

去官网报名


', '', '前端汇', '2016-06-30 20:05:48', '5', '0', '1', '0', '14', '', '1', '1', '', '6', '0'); INSERT INTO `li_article` VALUES ('174', 'asd', '', '


', '', '前端汇', '2016-07-04 19:41:39', '3', '0', '0', '0', '0', '', '1', '1', '', '0', '0'); -- ---------------------------- diff --git a/src/common/config/route.js b/src/common/config/route.js index 95b9479..1a16a4b 100644 --- a/src/common/config/route.js +++ b/src/common/config/route.js @@ -29,4 +29,4 @@ module.exports = [ ["jobs", "home/index/jobs"], [/^jobs\/(\d+)$/,"home/index/jobs?page=:1&pagesize=10"], [/^category\/(\d+)\/(\d+)$/, "home/index/category?id=:1&page=:2&pagesize=10"] -] \ No newline at end of file +] diff --git a/view/home/inc/header.html b/view/home/inc/header.html index 5f70e7b..7da9d7d 100644 --- a/view/home/inc/header.html +++ b/view/home/inc/header.html @@ -2,6 +2,7 @@ +