#1426
展开↯#1427
作者:广西南宁市
用canvas做画板,用 <input type="color">来控制颜色
#,广西南宁市,2017-05-22,16:14:38,
<input type="color" name="" id="colorSelect" value="" />
<canvas id="canvas" width="320" height="200" style="border:1px solid #eee;">您的浏览器不支持canvas</canvas>
<script>
var selector = document.getElementById("colorSelect");
selector.onchange = function(){
var color = this.value;
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var w = canvas.width , h = canvas.height;
ctx.fillStyle = color;
ctx.fillRect(0, 0, w, h);
}
</script>
Run code
Cut to clipboard
<input type="color" name="" id="newcolorSelect" value="" />
<script>
var selector = document.getElementById("newcolorSelect");
selector.onchange = function(){
var newcolor = this.value;
alert(newcolor);
}
</script>
Run code
Cut to clipboard
文章:常用html、demo代码 发表时间:2017-05-22, 16:13:42
#1428
作者:广西南宁市
想让雷军送F码,一定要表现出一个资深米粉的气质出来,必须从很早就开始使用小米手机,必须每场发布会必看,必须夸小米好出天际线,必须疯狂抢F码但一直未遂,必须祝雷军万事如意……总之,必须套路雷军。 #,广西南宁市,2017-05-09,09:56:50, 这是套路雷军还是被雷军套路? #,广西南宁市,2017-05-09,11:25:03, 一个玩你的男人,永远只会对你说:别走,再陪陪我好吗?就一会,一小会……一个爱你的男人,他是会对你说:傻瓜这么晚了!早点回去吧!别让你老公起疑心了。 #,广西南宁市,2017-05-09,11:25:50, 坐在我对面的一对小情侣把包包里的套套拿出来数,男的说怎么少了一个,然后俩人开始回忆再哪哪什么时间用来的。 #,广西南宁市,2017-05-09,11:26:44, 不知什么时候,网上的“文明用语”已经不是文明用语 #,广西南宁市,2017-05-09,11:27:21, 我是直男,我非常讨厌gay里gay气的人,所以我希望我未来的另一半也是直男。 #,广西南宁市,2017-05-09,11:29:02, 如果你经常为猜不透女生的真实想法而苦恼,教你个办法,说话时去掉吧字就可以。将我陪你去吧,我给你买吧,我帮你弄吧,改成我陪你去,我给你买,我帮你弄,这时如果她还是拒绝就是真的拒绝。当然如果她拒绝的时候也带吧字,比如不太好吧,不要了吧,还是算了吧,那她就没有拒绝。 #,广西南宁市,2017-05-09,11:29:46, 学过物理的人大概都知道能量守恒定律:能量既不会产生,也不会消失,它只会从一种介质转移到另一种介质,或者从一个状态转移从另一个状态。
因此,如果你常年和傻x在一起,等到某一天你觉得对方似乎没有以往那么傻x了,这个时候你就要引起注意了。 #,广西南宁市,2017-05-09,11:30:46, “如果你看到面前的阴影,别怕,那是因为你的背后有光”我安慰房屋失火的朋友说。 #,广西南宁市,2017-05-09,11:31:46, 一人上山求解于大师:大师 为什么我打了三年英雄联盟技术意识还是没长进?
大师指着岩石上水滴的一个小凹洞
他激动的说道:大师您是说我只要坚持不懈 终有一天会水滴石穿 技术大进吗?
大师:你他妈就是个坑 #,广西南宁市,2017-05-09,11:32:02, 自从把闹钟设成国歌之后,我每天都成了愿意做奴隶的人…… #,广西南宁市,2017-05-09,11:33:42, 藏私房钱的时候,最好在里面塞张白纸写上“送给亲爱的她的惊喜。” #,广西南宁市,2017-05-09,11:34:09, 我想要进行的一项关于男人为什么看AV的实验,结果还未开始便遭到重大失败:完全找不到不看AV的对照组! #,广西南宁市,2017-05-09,11:35:09, “记住密码”,是忘记密码的最佳方式。 #,广西南宁市,2017-05-20,15:55:29,@13 , 看了田源的措辞,感觉这人心智成熟度极低!而很多人却把对人的不礼貌行为当成性格豪爽耿直,真是令人三观尽毁~ #,广西南宁市,2017-05-20,15:55:51,@14 , 我觉得这只是员工单方面的槽点而已。本以为内部同事说一些玩笑话。结果被人当真。就像有一次我和同事吐槽:不至于为几千块钱工资把命搭上。结果被辞退了。妈蛋。 #,广西南宁市,2017-05-20,15:59:00,@14 , 第一次听说黄泛区,查询之后才知这是一段中华民族的苦难史。作为同胞,以此为歧视,也配做中国人!!! #,广西南宁市,2017-05-20,16:04:49,@14 , 其实我一眼就能识得,他是一个灵魂极为猥琐的家伙,但无关公德。 #,广西南宁市,2017-05-20,16:51:33, 社会平头哥,人狠话不多
因此,如果你常年和傻x在一起,等到某一天你觉得对方似乎没有以往那么傻x了,这个时候你就要引起注意了。
大师指着岩石上水滴的一个小凹洞
他激动的说道:大师您是说我只要坚持不懈 终有一天会水滴石穿 技术大进吗?
大师:你他妈就是个坑
文章:那几年,我觉得自己活得那么四面漏风 发表时间:2017-05-09, 09:56:37
#1429
作者:广西南宁市
jquery单引号和双引号的区别及使用注意
可以执行的语法:$("ul li a").filter(":contains('佳能'),:contains('松下'),:contains('卡西欧')").css("color","red");
错误的语法:$("ul li a").filter(":contains("佳能"),:contains("松下"),:contains("卡西欧")").css("color","red");
据资料显示在js中单引号和双引号都是一样的,但是在使用是去碰到了问题,于是乎百度给我答案,说是平时使用的时候尽量用单引号,只有碰到嵌套的时候才会同时用两种引号。即外面是单引号的时候里面就要用双引号,外面是双引号的时候里面就要用单引号,总之不能同时用双引号或者是单引号; #,广西南宁市,2017-05-20,16:11:10, 从代码编译的角度说的话,单引号在JS中被浏览器(IE,Chrome,Safari)编译的速度更快(在FireFox中双引号更快) #,广西南宁市,2017-05-20,16:11:34, 双引号需要按住shift键才能输入,比起单引号输入起来要麻烦。 #,广西南宁市,2017-05-20,16:11:51, 个人习惯,在js中我都用单引号,在json中,我都用双引号。 #,广西南宁市,2017-05-20,16:12:26, 建议用单引号,HTML 中用双引号,需要创建 HTML 组件的时候,随时复制黏贴就搞定了 #,广西南宁市,2017-05-20,16:12:37, 如果是一个人做开发,没有顾忌,可以跟随自己的喜好,JavaScript 同时支持两种引号,很大程度上跟你的输出有关,如果你需要输出双引号,那么外面就用单引号套,反之亦然
可以执行的语法:$("ul li a").filter(":contains('佳能'),:contains('松下'),:contains('卡西欧')").css("color","red");
错误的语法:$("ul li a").filter(":contains("佳能"),:contains("松下"),:contains("卡西欧")").css("color","red");
据资料显示在js中单引号和双引号都是一样的,但是在使用是去碰到了问题,于是乎百度给我答案,说是平时使用的时候尽量用单引号,只有碰到嵌套的时候才会同时用两种引号。即外面是单引号的时候里面就要用双引号,外面是双引号的时候里面就要用单引号,总之不能同时用双引号或者是单引号;
文章:常用html、demo代码 发表时间:2017-05-20, 16:09:41
#1430
作者:广西南宁市
使用jquery修改css中带有!important的样式属性
通过 $("div.test").css("width","100px");和 $("div.test").css("width","100px !important");是无效的
要想修改div的width,可以通过如下这种方式:
要想修改多个属性,可以这么做:
通过 $("div.test").css("width","100px");和 $("div.test").css("width","100px !important");是无效的
要想修改div的width,可以通过如下这种方式:
$("div.test").css("cssText", "width:650px !important;");
Run code
Cut to clipboard
要想修改多个属性,可以这么做:
$("div.test").css("cssText", "width:650px !important;overflow:hidden !important");
Run code
Cut to clipboard
文章:常用html、demo代码 发表时间:2017-05-20, 16:09:08
#1431
作者:北京市
知乎,与世界分享你刚编的故事 #,广西南宁市,2017-05-20,15:05:56, 知乎-与世界分享匿名的谣言。 #,广西南宁市,2017-05-20,15:07:37, “知乎精英”怎么就成了骂人的词 #,广西南宁市,2017-05-20,15:07:46, 先问是不是,在问为什么? #,广西南宁市,2017-05-20,15:09:16, 我一朋友在某银行的金融平台上班,人家执行力就是很慢,可人家一个星期的交易额都赶上一些知名P2P平台一年的量了。 #,广西南宁市,2017-05-20,15:09:51, 确实看上去很有用,实际上并没有什么卵用 #,广西南宁市,2017-05-20,15:45:45, 偏好,偏见,歧视
偏好就是你喜欢吃香菜;
偏见就是你觉得不喜欢吃香菜的人味觉有问题;
歧视就是你觉得不喜欢吃香菜的人智商有问题。
对偏好要包容,对偏见要努力消除,对歧视要抵制。看着是不是很简单?
可惜这三者的界限往往很模糊。
举个例子,30岁的你想让婚介帮自己找个年轻的人女性结婚,所以他加上了一个择偶条件“30岁以下20岁以上”。这时候一个人走了过来,告诉他:“你这是歧视!你有没有想过为什么现在所有人都要求女性30岁以下,30岁以上的女性难道真的就有什么不同了吗?抵制歧视,就应该从现在做起。“
你一想似乎是这个道理啊,而后你就把择偶条件改成了60岁以下。正当这个时候,又有个人走过来,他问了你第二个问题:”你有没有想过60岁以上女性的感受?难道人退休了就不应该有爱情了吗?为什么你要在纸面上区别对待某类人呢?“
是啊,为什么要做这样的事情呢?
你毅然决然的划掉了你的择偶年龄标准。在经过一番无比复杂的筛选之后,你终于找到了一个年芳25的完美伴侣。正当你和她一起去民政局准备领证的时候,一大帮人跑到了你的面前,愤怒的指责你:”你这个人怎么就是不听劝呢?我们那么苦口婆心的和你讲,不要歧视30岁以上的女子,你最后怎么还是选了一个不到30的女子?你心里还是有歧视啊!抵制歧视,应该从你我做起!“
你不好意思的放开了伴侣的手,独自一个人走回家里,快到家门的时候才想起来:”不对啊,我只是想找个比我年轻的结婚罢了。“
看到这里你可能会觉得上面的事情很荒诞,可惜这样的事情其实每天都发生在我们周围。偏好的过度表达造成了偏见,偏见的集中表达又引起了歧视。贝克尔(Gary Becker)在他的《种族歧视经济学》(The Economics of Discrimination )写的更加精辟:歧视往往是一种社会习俗,对个体来说,不遵从规则往往就意味着被赶出这个群体,但是留在这个群体里面对普通人来说往往是利大于弊的。歧视成了主流,非歧视的行为就会反过来受损。违背规则,往往会受到损失。
有的时候,一个人想说自己不喜欢吃香菜也是件不容易的事情。
偏好就是你喜欢吃香菜;
偏见就是你觉得不喜欢吃香菜的人味觉有问题;
歧视就是你觉得不喜欢吃香菜的人智商有问题。
对偏好要包容,对偏见要努力消除,对歧视要抵制。看着是不是很简单?
可惜这三者的界限往往很模糊。
举个例子,30岁的你想让婚介帮自己找个年轻的人女性结婚,所以他加上了一个择偶条件“30岁以下20岁以上”。这时候一个人走了过来,告诉他:“你这是歧视!你有没有想过为什么现在所有人都要求女性30岁以下,30岁以上的女性难道真的就有什么不同了吗?抵制歧视,就应该从现在做起。“
你一想似乎是这个道理啊,而后你就把择偶条件改成了60岁以下。正当这个时候,又有个人走过来,他问了你第二个问题:”你有没有想过60岁以上女性的感受?难道人退休了就不应该有爱情了吗?为什么你要在纸面上区别对待某类人呢?“
是啊,为什么要做这样的事情呢?
你毅然决然的划掉了你的择偶年龄标准。在经过一番无比复杂的筛选之后,你终于找到了一个年芳25的完美伴侣。正当你和她一起去民政局准备领证的时候,一大帮人跑到了你的面前,愤怒的指责你:”你这个人怎么就是不听劝呢?我们那么苦口婆心的和你讲,不要歧视30岁以上的女子,你最后怎么还是选了一个不到30的女子?你心里还是有歧视啊!抵制歧视,应该从你我做起!“
你不好意思的放开了伴侣的手,独自一个人走回家里,快到家门的时候才想起来:”不对啊,我只是想找个比我年轻的结婚罢了。“
看到这里你可能会觉得上面的事情很荒诞,可惜这样的事情其实每天都发生在我们周围。偏好的过度表达造成了偏见,偏见的集中表达又引起了歧视。贝克尔(Gary Becker)在他的《种族歧视经济学》(The Economics of Discrimination )写的更加精辟:歧视往往是一种社会习俗,对个体来说,不遵从规则往往就意味着被赶出这个群体,但是留在这个群体里面对普通人来说往往是利大于弊的。歧视成了主流,非歧视的行为就会反过来受损。违背规则,往往会受到损失。
有的时候,一个人想说自己不喜欢吃香菜也是件不容易的事情。
文章:街上如果看到两个姑娘向你走来,可要小心 发表时间:2017-03-08, 19:40:11
#1432
作者:广西南宁市
null一穷二白,难道你从帽子里变出东西来?吃五个饼会饱,只吃第五个肯定饱不了。 #,广西南宁市,2017-05-20,15:14:20, 创新是什么,我认为是从零到一,然而很多很多东西从零到一的过程都是经历过0.001、0.01、0.1一个或漫长或相对较短的过程再最后到1的。 #,广西南宁市,2017-05-20,15:23:47,@1 , 到现在了 我觉得还在说抄袭两个字,真的是特别的low。 市场上的产品,难道真的只能一家玩? 我能说苹果出手机还是抄袭摩托罗拉吗? #,广西南宁市,2017-05-20,15:24:39, 说颠覆和怼谈不上。但战略卡位还是需要的。未来谁也说不准,万一这个铺垫成了伏笔呢。
文章:那几年,我觉得自己活得那么四面漏风 发表时间:2017-05-06, 15:32:42
#1434
作者:广西南宁市
1、小米利用自己的手机品牌知名度,销售净化器、插线板这些周边这个想法很新颖;
2、小米每件东西的价格都做到很低,量容易上去;
3、小米周边都卖的不错,特别是文中提到的三个,营收很高。
移动电源、插线板、净化器都没有很强的巨头,而且现有产品的外观,功能都很有“痛点”需要解决。但外观性创新是大家都看得见,摸得着,容易模仿的,一旦当传统行业巨头反应过来了(比如公牛),那么没有核心技术作为壁垒/后盾,光靠品牌、外观、价格打头阵,很容易被拉入红海,变成只有营收,没有利润的产品。而技术更强、供应链更成熟、销售渠道更扎实的传统企业,很容易就翻身,那这场“商业战争",孰胜孰负仍未可知。
2、小米每件东西的价格都做到很低,量容易上去;
3、小米周边都卖的不错,特别是文中提到的三个,营收很高。
移动电源、插线板、净化器都没有很强的巨头,而且现有产品的外观,功能都很有“痛点”需要解决。但外观性创新是大家都看得见,摸得着,容易模仿的,一旦当传统行业巨头反应过来了(比如公牛),那么没有核心技术作为壁垒/后盾,光靠品牌、外观、价格打头阵,很容易被拉入红海,变成只有营收,没有利润的产品。而技术更强、供应链更成熟、销售渠道更扎实的传统企业,很容易就翻身,那这场“商业战争",孰胜孰负仍未可知。
文章:从发烧友手机品牌到搅局巨头,小米这六年发生了什么? 发表时间:2017-05-20, 14:55:37
#1435
作者:广西南宁市
jQuery实现高亮显示网页关键词的方法
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>jquery文字高亮显示</title>
<style type="text/css">
.highlight {
background-color: #fff34d;
-moz-border-radius: 5px; /* FF1+ */
-webkit-border-radius: 5px; /* Saf3-4 */
border-radius: 5px; /* Opera 10.5, IE 9, Saf5, Chrome */
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7); /* FF3.5+ */
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7); /* Saf3.0+, Chrome */
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7); /* Opera 10.5+, IE 9.0 */
}
.highlight {
padding:1px 4px;
margin:0 -4px;
}
</style>
</head>
<body>
Search: <input type="text" id="text-search" />
<p>This can include web design, web content development, client liaison, client-side/server-side scripting, web server and network security configuration, and e-commerce development. However, among web professionals, "web development" usually refers to the main non-design aspects of building web sites: writing markup and coding. Web development can range from developing the simplest static single page of plain text to the most complex web-based internet applications, electronic businesses, or social ntwork services.</p>
(Text from Wikipedia)
<script type="text/javascript" src="https://lizhenqiu.com/templates/default/jquery.min.js"></script>
<script type="text/javascript">
jQuery.fn.highlight = function(pat) {
function innerHighlight(node, pat) {
var skip = 0;
if (node.nodeType == 3) {
var pos = node.data.toUpperCase().indexOf(pat);
if (pos >= 0) {
var spannode = document.createElement('span');
spannode.className = 'highlight';
var middlebit = node.splitText(pos);
var endbit = middlebit.splitText(pat.length);
var middleclone = middlebit.cloneNode(true);
spannode.appendChild(middleclone);
middlebit.parentNode.replaceChild(spannode, middlebit);
skip = 1;
}
}
else if (node.nodeType == 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) {
for (var i = 0; i < node.childNodes.length; ++i) {
i += innerHighlight(node.childNodes[i], pat);
}
}
return skip;
}
return this.each(function() {
innerHighlight(this, pat.toUpperCase());
});
};
jQuery.fn.removeHighlight = function() {
function newNormalize(node) {
for (var i = 0, children = node.childNodes, nodeCount = children.length; i < nodeCount; i++) {
var child = children[i];
if (child.nodeType == 1) {
newNormalize(child);
continue;
}
if (child.nodeType != 3) { continue; }
var next = child.nextSibling;
if (next == null || next.nodeType != 3) { continue; }
var combined_text = child.nodeValue + next.nodeValue;
new_node = node.ownerDocument.createTextNode(combined_text);
node.insertBefore(new_node, child);
node.removeChild(child);
node.removeChild(next);
i--;
nodeCount--;
}
}
return this.find("span.highlight").each(function() {
var thisParent = this.parentNode;
thisParent.replaceChild(this.firstChild, this);
newNormalize(thisParent);
}).end();
};
</script>
<script type="text/javascript">
$(function() {
$('#text-search').bind('keyup change', function(ev) {
// pull in the new value
var searchTerm = $(this).val();
// remove any old highlighted terms
$('body').removeHighlight();
// disable highlighting if empty
if ( searchTerm ) {
// highlight the new term
$('body').highlight( searchTerm );
}
});
});
</script>
</body>
</html>
Run code
Cut to clipboard
文章:常用html、demo代码 发表时间:2017-05-19, 18:47:23
#1437
作者:广西南宁市
我大百度呢?我大百度呢? #,广西南宁市,2017-05-19,09:50:12, 百度一下你就知道 #,广西南宁市,2017-05-19,09:50:53, 很显然你们这帮中年人会看好阿里,但世界终将是那帮中小学生的 #,广西南宁市,2017-05-19,09:51:31, 这是阿里首次在年收入上超越腾讯~ 看看两家的财报:腾讯游戏业务收入占比在减少,着重强调了内容生态和广告的收入。阿里对于电商的力度好像也在减弱,在什么云计算啊、娱乐啊等创新项目上展现自己的业绩了。 #,广西南宁市,2017-05-19,09:51:45,@3 , 阿里的场子够大,只要保持稳定增长,腾讯是拍马赶不上。 #,广西南宁市,2017-05-19,09:52:11, 百度早已不在一个量级。输在了移动端。 #,广西南宁市,2017-05-19,09:52:33,@2 , 小学生总会成年,同样也会有更多的小学生出现。个人认为,二者的潜力还是得看谁的全球化能成功,全球化做的更好的更强。腾讯的大娱乐版块是有可能全球化成功的,其余的比较难 #,广西南宁市,2017-05-19,09:53:25,@2 , 小孩长大了总归还是要买买买,不可能打一辈子游戏吧 #,广西南宁市,2017-05-19,09:54:18,@1 , 百度快退出三大巨头的舞台了。
文章:【转】相遇3000亿美金之巅,阿里腾讯战力与血值几何? 发表时间:2017-05-19, 09:49:53
#1438
作者:广西南宁市
阿里巴巴的竞争对手不在中国而在硅谷。 #,广西南宁市,2017-05-19,09:53:41, 阿里这一步步走来,真的非常非常佩服马云的格局观,而且战略落地的能力太强。。。 #,广西南宁市,2017-05-19,09:53:50, 一个企业家,一个商业家 #,广西南宁市,2017-05-19,09:54:06,@2 , 两个都是在中国局域网里混吃混喝,窝里斗的
文章:【转】相遇3000亿美金之巅,阿里腾讯战力与血值几何? 发表时间:2017-05-19, 09:51:58
#1439
作者:广西南宁市
冒泡排序算法的可视化
<!DOCTYPE html>
<html ng-app>
<head>
<script data-require="angular.js@1.3.0-beta.5" data-semver="1.3.0-beta.5" src="https://code.angularjs.org/1.3.0-beta.5/angular.js"></script>
<style>/* Styles go here */
.value-line{
margin-bottom:1px;
background:green;
color:white;
}
</style>
<script>// Code goes here
function ctrl($scope,$timeout){
var defaultData=[37,28,29,24,21,11,5,10,4,3,8,1,25,12,20,30];
$scope.reset=function(){
$scope.data=defaultData.map(function(i){
return i;
});
pointer=0;
checklen=$scope.data.length;
$scope.alertMsg="";
}
var sorting=function(){
var data=$scope.data;
if(data[pointer]>data[pointer+1])
{
var tmp=data[pointer];
data[pointer]=data[pointer+1];
data[pointer+1]=tmp;
}
pointer++;
if( pointer>=checklen){
checklen--;
pointer=0;
}
if(checklen <=0){
$scope.alertMsg="排序结束";
}else{
$timeout(sorting,100);
}
};
$scope.start=function(){
$timeout(sorting,100);
}
$scope.reset();
}</script>
</head>
<body>
<h1>冒泡排序算法视觉化</h1>
<div ng-controller="ctrl">
<div class="value-line" ng-repeat="i in data" style="width:{{i*10}}px;">{{i}}</div>
<button ng-click="start()">排序</button>
<button ng-click="reset()">重置</button>
<span style="color:red">{{alertMsg}}</span>
</div>
</body>
</html>
Run code
Cut to clipboard
文章:常用html、demo代码 发表时间:2017-05-18, 17:25:39
#1440
作者:广西南宁市
php实现图片以base64显示的方法
$img_file = 'https://img.alicdn.com/bao/uploaded/TB1eaiELpXXXXcPXpXXSutbFXXX.jpg';
$img_info = getimagesize($img_file);
$img_src = "data:{$img_info['mime']};base64," . base64_encode(file_get_contents($img_file));
exit("<img src='{$img_src}' />");
Run code
Cut to clipboard
文章:程序员编程常用网页工具集[游戏] 发表时间:2017-05-18, 11:18:26
#1442
作者:广西南宁市
说明:
scrollWidth:对象的实际内容的宽度,不包边线宽度,会随对象中内容超过可视区后而变大。
clientWidth:对象内容的可视区的宽度,不包滚动条等边线,会随对象显示大小的变化而改变。
offsetWidth:对象整体的实际宽度,包滚动条等边线,会随对象显示大小的变化而改变。 #,广西南宁市,2017-05-17,17:24:01, scrollHeight返回元素的完整的高度,以像素为单位.
当一个元素拥有滚动条时(比如由于 CSS 的 overflow 属性),这些属性和 offsetHeight 不同,offsetHeight只是报告元素的可见部分的大小。这是非标准的但却得到很好支持的属性。
这个属性是非标准的,所以在不同浏览器中可能会存在差异,例如:
在Firefox浏览器中:
scrollHeight就是滚动条可滚动的部分还要加上border的高度还要加上横向滚动条不可用的高度,与clientHeight比起来,多个border的高度跟横向滚动条不可用的高度.
在IE浏览器中:
指这个对象它所包含的对象的高度加上border的高度和margin #,广西南宁市,2017-05-17,17:26:07, 详情请看这个jsfiddle:http://jsfiddle.net/1hzhrwLs/
scrollWidth:对象的实际内容的宽度,不包边线宽度,会随对象中内容超过可视区后而变大。
clientWidth:对象内容的可视区的宽度,不包滚动条等边线,会随对象显示大小的变化而改变。
offsetWidth:对象整体的实际宽度,包滚动条等边线,会随对象显示大小的变化而改变。
当一个元素拥有滚动条时(比如由于 CSS 的 overflow 属性),这些属性和 offsetHeight 不同,offsetHeight只是报告元素的可见部分的大小。这是非标准的但却得到很好支持的属性。
这个属性是非标准的,所以在不同浏览器中可能会存在差异,例如:
在Firefox浏览器中:
scrollHeight就是滚动条可滚动的部分还要加上border的高度还要加上横向滚动条不可用的高度,与clientHeight比起来,多个border的高度跟横向滚动条不可用的高度.
在IE浏览器中:
指这个对象它所包含的对象的高度加上border的高度和margin
<style>body { padding: 50px; }
div { width: 120px; border: 1px solid gray; }
.long { width: 400px !important; }
.ellipsis {
text-overflow: ellipsis;
overflow: hidden;
}</style>
<div class="operateTarget ellipsis"></div>
<div class="operateTarget ellipsis long"></div>
<div class="operateTarget"></div>
<div class="ellipsis"></div>
<script>
$("div").text('very_very_very_very_long_text');
$(".operateTarget").map(function() {
if (this.offsetWidth < this.scrollWidth) {
$(this).css("color", "red");
}
});
</script>
Run code
Cut to clipboard
文章:常用html、demo代码 发表时间:2017-05-17, 17:23:09
#1443
作者:广西南宁市
TextArea里Placeholder换行 使用jQuery的watermark控件 jquery.watermark.js
问题
页面上使用TextArea控件时,会时不时的想给个提示,比如按照一定方式操作之类的。正常情况下,会使用Placeholder,但这样的提示是不会换行的,无论是用\r\n,还是用<br/>,都不起作用。
前段时间碰到这个问题,一直没有解决,所有页面上的Placeholder都是一行到底,丑死了。
无意中,一个朋友提供了一个方法,完美的解决了问题,贴出来和大家分享一下:
CSS:
火狐和其他浏览器不兼容,有自己专门的方法(以下):
实际测试了一下,还是不能用。
问题
页面上使用TextArea控件时,会时不时的想给个提示,比如按照一定方式操作之类的。正常情况下,会使用Placeholder,但这样的提示是不会换行的,无论是用\r\n,还是用<br/>,都不起作用。
前段时间碰到这个问题,一直没有解决,所有页面上的Placeholder都是一行到底,丑死了。
无意中,一个朋友提供了一个方法,完美的解决了问题,贴出来和大家分享一下:
CSS:
#text1::-webkit-input-placeholder::after {
display:block;
content:"Line 2\A Line 3";
}
#text2::-webkit-input-placeholder::before {
color:#666;
content:"Line 1\A Line 2\A Line 3\A";
}
Run code
Cut to clipboard
火狐和其他浏览器不兼容,有自己专门的方法(以下):
textarea::-moz-placeholder:after{
content:"line@ \A line#";/* \A 表示换行 */
color:red;
};
Run code
Cut to clipboard
实际测试了一下,还是不能用。
文章:常用html、demo代码 发表时间:2017-05-17, 16:54:13
#1444
作者:广西南宁市
TCP协议与UDP协议的区别
首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信!
TCP/IP协议是一个协议簇。里面包括很多协议的。UDP只是其中的一个。之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了。
TCP/IP协议集包括应用层,传输层,网络层,网络访问层。
其中应用层包括:
超文本传输协议(HTTP):万维网的基本协议.
文件传输(TFTP简单文件传输协议):
远程登录(Telnet),提供远程访问其它主机功能,它允许用户登录
internet主机,并在这台主机上执行命令.
网络管理(SNMP简单网络管理协议),该协议提供了监控网络设备的方法,以及配置管理,统计信息收集,性能管理及安全管理等.
域名系统(DNS),该系统用于在internet中将域名及其公共广播的网络节点转换成IP地址.
其次网络层包括:
Internet协议(IP)
Internet控制信息协议(ICMP)
地址解析协议(ARP)
反向地址解析协议(RARP)
最后说网络访问层:网络访问层又称作主机到网络层(host-to-network).网络访问层的功能包括IP地址与物理地址硬件的映射,以及将IP封装成帧.基于不同硬件类型的网络接口,网络访问层定义了和物理介质的连接.
当然我这里说得不够完善,TCP/IP协议本来就是一门学问,每一个分支都是一个很复杂的流程,但我相信每位学习软件开发的同学都有必要去仔细了解一番。
下面我着重讲解一下TCP协议和UDP协议的区别。
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,只简单的描述下这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。
详细点说就是:(文章部分转载http://zhangjiangxing-gmail-com.iteye.com,主要是这个人讲解得很到位,的确很容易使人理解!)
TCP三次握手过程
1 主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段,
主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我.
2 主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:
我已经收到你的请求了,你可以传输数据了;你要用哪佧序列号作为起始数据段来回应我
3 主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:"我已收到回复,我现在要开始传输实际数据了
这样3次握手就完成了,主机A和主机B 就可以传输数据了.
3次握手的特点
没有应用层的数据
SYN这个标志位只有在TCP建产连接时才会被置1
握手完成后SYN标志位被置0
TCP建立连接要进行3次握手,而断开连接要进行4次
1 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
2 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
3 由B 端再提出反方向的关闭请求,将FIN置1
4 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.
由TCP的三次握手和四次断开可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端
和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础
名词解释
ACK TCP报头的控制位之一,对数据进行确认.确认由目的端发出,用它来告诉发送端这个序列号之前的数据段
都收到了.比如,确认号为X,则表示前X-1个数据段都收到了,只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求重传数据,保证数据的完整性.
SYN 同步序列号,TCP建立连接时将这个位置1
FIN 发送端完成发送任务位,当TCP完成数据传输需要断开时,提出断开连接的一方将这位置1
TCP的包头结构:
源端口 16位
目标端口 16位
序列号 32位
回应序号 32位
TCP头长度 4位
reserved 6位
控制代码 6位
窗口大小 16位
偏移量 16位
校验和 16位
选项 32位(可选)
这样我们得出了TCP包头的最小长度,为20字节。
UDP(User Data Protocol,用户数据报协议)
(1) UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
(2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。
(3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
(4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
(5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。
(6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。
UDP的包头结构:
源端口 16位
目的端口 16位
长度 16位
校验和 16位
小结TCP与UDP的区别:
1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
1)提供IP环境下的数据可靠传输(一台计算机发出的字节流会无差错的发往网络上的其他计算机,而且计算机A接收数据包的时候,也会向计算机B回发数据包,这也会产生部分通信量),有效流控,全双工操作(数据在两个方向上能同时传递),多路复用服务,是面向连接,端到端的传输;
2)面向连接:正式通信前必须要与对方建立连接。事先为所发送的数据开辟出连接好的通道,然后再进行数据发送,像打电话。
3)TCP支持的应用协议:Telnet(远程登录)、FTP(文件传输协议)、SMTP(简单邮件传输协议)。TCP用于传输数据量大,可靠性要求高的应用。
UDP(用户数据报协议,User Data Protocol)
1)面向非连接的(正式通信前不必与对方建立连接,不管对方状态就直接发送,像短信,QQ),不能提供可靠性、流控、差错恢复功能。UDP用于一次只传送少量数据,可靠性要求低、传输经济等应用。
2) UDP支持的应用协议:NFS(网络文件系统)、SNMP(简单网络管理系统)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。
总结:
TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。
UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。
文章:常用html、demo代码 发表时间:2017-05-17, 10:52:41
要对数据库的安全做出更加全面的考量,以下两种方式任选其一:
A. 通过添加(php 5.3.6以前版本):$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
B. 升级到php 5.3.6 (不用设置PDO::ATTR_EMULATE_PREPARES也可以)
为了程序移植性和统一安全性,建议使用$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false)方法
$dbh = new PDO("mysql:host=localhost; dbname=demo", "user", "pass"); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //禁用prepared statements的仿真效果 $dbh->exec("set names 'utf8'");
使用PDO访问MySQL数据库时,真正的real prepared statements 默认情况下是不使用的。为了解决这个问题,你必须禁用 prepared statements的仿真效果。
当调用 prepare() 时,查询语句已经发送给了数据库服务器,此时只有占位符 ? 发送过去,没有用户提交的数据;当调用到 execute()时,用户提交过来的值才会传送给数据库,他们是分开传送的,两者独立的,SQL攻击者没有一点机会。
但是我们需要注意的是以下几种情况,PDO并不能帮助你防范SQL注入
1、你不能让占位符 ? 代替一组值,如:
SELECT * FROM blog WHERE userid IN ( ? );
2、你不能让占位符代替数据表名或列名,如:
SELECT * FROM blog ORDER BY ?;
3、你不能让占位符 ? 代替任何其他SQL语法,如:
SELECT EXTRACT( ? FROM datetime_column) AS variable_datetime_element FROM blog;
知道以上几点之后,我们就可以总结使用PDO杜绝SQL注入的几个注意事项:
1. php升级到5.3.6+,生产环境强烈建议升级到php 5.3.9+ php 5.4+,php 5.3.8存在致命的hash碰撞漏洞。
2. 若使用php 5.3.6+, 请在在PDO的DSN中指定charset属性
3. 如果使用了PHP 5.3.6及以前版本,设置PDO::ATTR_EMULATE_PREPARES参数为false(即由MySQL进行变量处理),php 5.3.6以上版本已经处理了这个问题,无论是使用本地模拟prepare还是调用mysql server的prepare均可。在DSN中指定charset是无效的,同时set names <charset>的执行是必不可少的。
4. 如果使用了PHP 5.3.6及以前版本, 因Yii框架默认并未设置ATTR_EMULATE_PREPARES的值,请在数据库配置文件中指定emulatePrepare的值为false。
那么,有个问题,如果在DSN中指定了charset, 是否还需要执行set names <charset>呢?
是的,不能省。set names <charset>其实有两个作用:
A. 告诉mysql server, 客户端(PHP程序)提交给它的编码是什么
B. 告诉mysql server, 客户端需要的结果的编码是什么
也就是说,如果数据表使用gbk字符集,而PHP程序使用UTF-8编码,我们在执行查询前运行set names utf8, 告诉mysql server正确编码即可,无须在程序中编码转换。这样我们以utf-8编码提交查询到mysql server, 得到的结果也会是utf-8编码。省却了程序中的转换编码问题,不要有疑问,这样做不会产生乱码。
那么在DSN中指定charset的作用是什么? 只是告诉PDO, 本地驱动转义时使用指定的字符集(并不是设定mysql server通信字符集),设置mysql server通信字符集,还得使用set names <charset>指令。
$st->execute(); $result = $st->fetchAll();
在php5.3.6之后,pdo不会在本地对sql进行拼接然后将拼接后的sql传递给mysql server处理(也就是不会在本地做转义处理)。pdo的处理方法是在prepare函数调用时,将预处理好的sql模板(包含占位符)通过mysql协议传递给mysql server,告诉mysql server模板的结构以及语义。当调用execute时,将两个参数传递给mysql server。由mysql server完成变量的转移处理。将sql模板和变量分两次传递,即解决了sql注入问题。
但无法对表或字段的名字进行变量绑定。
因此当表名或字段名不确定(即可能从用户输入中获取),而需要动态组装SQL语句时,即使是用了PDO变量绑定来提供字段的值,应当注意表名和字段名部分的过滤。
方法 bindParam() 和 bindValue() 非常相似。
唯一的区别就是前者使用一个PHP变量绑定参数,而后者使用一个值。
所以使用bindParam是第二个参数只能用变量名,而不能用变量值,而bindValue至可以使用具体值。
$stm = $pdo->prepare("select * from users where user = :user"); $user = "jack"; //正确 $stm->bindParam(":user",$user); //错误 //$stm->bindParam(":user","jack"); //正确 $stm->bindValue(":user",$user); //正确 $stm->bindValue(":user","jack");
另外在存储过程中,bindParam可以绑定为input/output变量,如下面
$stm = $pdo->prepare("call func(:param1)"); $param1 = "abcd"; $stm->bindParam(":param1",$param1); //正确 $stm->execute();
存储过程执行过后的结果可以直接反应到变量上。
对于那些内存中的大数据块参数,处于性能的考虑,应优先使用前者bindParam()
PDOStatement::bindParam — 绑定一个参数到指定的变量名。
绑定一个PHP变量到用作预处理的SQL语句中的对应命名占位符或问号占位符。 不同于 PDOStatement::bindValue() ,此变量作为引用被绑定,并只在 PDOStatement::execute() 被调用的时候才取其值。
PDOStatement::bindValue — 把一个值绑定到一个参数。
绑定一个值到用作预处理的 SQL 语句中的对应命名占位符或问号占位符。
<?php $stm = $pdo->prepare("select * from users where user = :user"); $user = "jack"; //正确 $stm->bindParam(":user",$user); //错误 $stm->bindParam(":user","jack"); //正确 $stm->bindValue(":user",$user); //正确 $stm->bindValue(":user","jack"); //所以使用bindParam是第二个参数只能用变量名,而不能用变量值,而bindValue至可以使用具体值。 ?>
PDOStatement::bindColumn — 绑定一列到一个 PHP 变量。
安排一个特定的变量绑定到一个查询结果集中给定的列。每次调用 PDOStatement::fetch() 或 PDOStatement::fetchAll() 都将更新所有绑定到列的变量。
<?php function readData ( $dbh ) { $sql = 'SELECT name, colour, calories FROM fruit' ; try { $stmt = $dbh -> prepare ( $sql ); $stmt -> execute (); /* 通过列号绑定 */ $stmt -> bindColumn ( 1 , $name ); $stmt -> bindColumn ( 2 , $colour ); /* 通过列名绑定 */ $stmt -> bindColumn ( 'calories' , $cals ); while ( $row = $stmt -> fetch ( PDO :: FETCH_BOUND )) { $data = $name . "\t" . $colour . "\t" . $cals . "\n" ; print $data ; } } catch ( PDOException $e ) { print $e -> getMessage (); } } readData ( $dbh ); ?>