142012
 

最近开始研究nodejs,发现网上关于这方面的教程不是很多,so写篇文章。

系统版本为Ubuntu和Windows,先讲讲Ubuntu下搭建nodejs和express框架:

安装完成后查看版本,可以看是否安装成功:

然后准备安装NPM(Node Package Manger):

如果没安装curl的话,要先安装curl:

安装完成后查看:

下面就是安装nodejs了:

———————————-分割线———————————-

Windows下nodejs安装方法:

下载nodejs官方Windows版本:

http://nodejs.org/#download

默认是安装在C:\Program Files (x86)\nodejs下的,我们把nodejs文件夹复制到D:\根目录下方便操作。

在Windows环境变量中选择PATH,添加D:\nodejs,然后新建环境变量NODE_PATH,添加D:\nodejs\node_modules即可。

安装express:

因为express需要jade支持,所以还需要安装一个jade

测试安装情况:

可以创建一个express项目查看结果:

然后在浏览器打开http://127.0.0.1:3000/查看。

032012
 

GoAppFun – iPhone频道,提供最热门的iPhone4s/iPhone4/iPhone游戏、软件等,Apple iPhone应用程序下载,数十万苹果iPhone免费应用程序任您选,iphone4最火软件下载信息由iphone/ipad2游戏软件下载导航站goappfun.com为您提供.最新最全的Iphone4 限时免费游戏信息。

 

网页地址:

http://goappfun.com/

 

欢迎各位博友访问并提出意见~E-mail:babywzazy#gmail.com (将#换为@)

242012
 
 1.一天,觉得上班走路有点累。想去买辆自行车。

2.结果去了一看,要2500块。旁边的人说,2500都掏了不如加点钱买辆电动。

3.遂问电动车价格。3500。决定买。却被告知不如加点钱买小踏板摩托划算。

4.于是看摩托车。4000.决定买。

5.又被告知说小踏板不安全。不如买大摩托。

6.于是再看。大摩托要6000.决定买。挑来挑去。发现看上眼的居然靠近1w。

7.不料挺说1w可以买个2手车。于是改作买车。

8.挑来挑去。2手捷达要将近3w。决定买。

9.可是隔壁奇瑞的说3w可以买他们的新车了。遂改买奇瑞。

10.上去一坐。有点挤。不要紧。加钱换a3.

11.觉得车子矮。又去看瑞虎。

12.下来一算10w多。不如不买奇瑞买合资的。看上polo。

13.被告知简配。去订高尔夫。人说加价。一咬牙。决定买crv。反正和高尔夫价格差不多。

14.结果听说途观好像也是那个价格左右。遂去看途观。

15.不料看中了新passat。决定买。

16.一算价格。似乎可以买奥迪。于是又反悔去看奥迪a4.

17.结果路过宝马4s店看到了3系。遂改选3系。

18.前前后后看完决定买时一算。要30w左右。不禁又想买suv车型。

19.于是到了隔壁雪佛兰去看科帕奇。看完觉得牛逼想买。

20.门口却开过一辆jeep指南者。一问价格差不多。改!去jeep店。

21.快订车时碰到熟人。看熟人开着福特锐界。眼红要买。去了一问。40w。ok。

22.准备掏钱。又一想。妈的都40w花了。不如加点钱一步到位买路虎?于是去看极光。对外形满意。决定买。

23.咨询单位司机。被告知越野性能不如普拉多。价格只差9w。好!买普拉多!去丰田。

24.看了普拉多觉得丑,妈的咬牙买兰德酷路泽4500!最后100多w。

25.妈的。不买suv了。买宝马7!

26.。。。。一番折腾。最终买了辆劳斯莱斯。

27.提车。开心的不得了。

28.上去一坐才想起来。妈的。

29.老子驾照还没学!…

292012
 

最近继续研究了一下objective-c的一些东西,突然想到还没涉及过timer这个东东。。。

还是老规矩,简单写个demo吧~

当然,有启动timer就有停止~

192012
 

【简介】本文主要实现获取textarea和input光标的像素位置,即光标的offsetLeft与offsetTop。可实现如下效果:

1

2

首先说明一下,在网上搜到的很多代码是如何获取输入光标位置的如下代码是如何获取光标的的字符位置,如对于串“He|llo World!”返回的是光标|前的字符数2,并不是光标在页面上的像素位置。当然,这段代码对于获取光标的像素位置能起到一定的辅助作用。

对于IE浏览器,通过下面的代码1实现起来比较方便。

而对于firefox之类的浏览器则通过模拟来实现,如下图所示。首先通过拷贝输入区域的样式到一个div层(clone层),然后在此clone层之中的text子层添加光标之前的字符,并在text子层之后添加focus层,focus层中包含字符“|”来模拟光标,进而通过获取focus层的偏移量即可获得文本光标的像素坐标位置。

3

具体实现代码如下:


var kingwolfofsky = {
/**
* 获取输入光标在页面中的坐标
* @param {HTMLElement} 输入框元素
* @return {Object} 返回left和top,bottom
*/
getInputPositon: function (elem) {
if (document.selection) { //IE Support
elem.focus();
var Sel = document.selection.createRange();
return {
left: Sel.boundingLeft,
top: Sel.boundingTop,
bottom: Sel.boundingTop + Sel.boundingHeight
};
} else {
var that = this;
var cloneDiv = ‘{$clone_div}’, cloneLeft = ‘{$cloneLeft}’, cloneFocus = ‘{$cloneFocus}’, cloneRight = ‘{$cloneRight}’;
var none = ‘ ‘;
var div = elem[cloneDiv] || document.createElement(‘div’), focus = elem[cloneFocus] || document.createElement(‘span’);
var text = elem[cloneLeft] || document.createElement(‘span’);
var offset = that._offset(elem), index = this._getFocus(elem), focusOffset = { left: 0, top: 0 };

if (!elem[cloneDiv]) {
elem[cloneDiv] = div, elem[cloneFocus] = focus;
elem[cloneLeft] = text;
div.appendChild(text);
div.appendChild(focus);
document.body.appendChild(div);
focus.innerHTML = ‘|’;
focus.style.cssText = ‘display:inline-block;width:0px;overflow:hidden;z-index:-100;word-wrap:break-word;word-break:break-all;’;
div.className = this._cloneStyle(elem);
div.style.cssText = ‘visibility:hidden;display:inline-block;position:absolute;z-index:-100;word-wrap:break-word;word-break:break-all;overflow:hidden;’;
};
div.style.left = this._offset(elem).left + “px”;
div.style.top = this._offset(elem).top + “px”;
var strTmp = elem.value.substring(0, index).replace(//g, ‘>’).replace(/\n/g, ‘
‘).replace(/\s/g, none);
text.innerHTML = strTmp;

focus.style.display = ‘inline-block’;
try { focusOffset = this._offset(focus); } catch (e) { };
focus.style.display = ‘none’;
return {
left: focusOffset.left,
top: focusOffset.top,
bottom: focusOffset.bottom
};
}
},

// 克隆元素样式并返回类
_cloneStyle: function (elem, cache) {
if (!cache && elem['{cloneName}']) return elem['{cloneName}'];
var className, name, rstyle = /^(number|string)$/;
var rname = /^(content|outline|outlineWidth)$/; //Opera: content; IE8:outline && outlineWidth
var cssText = [], sStyle = elem.style;

for (name in sStyle) {
if (!rname.test(name)) {
val = this._getStyle(elem, name);
if (val !== ” && rstyle.test(typeof val)) { // Firefox 4
name = name.replace(/([A-Z])/g, “-$1″).toLowerCase();
cssText.push(name);
cssText.push(‘:’);
cssText.push(val);
cssText.push(‘;’);
};
};
};
cssText = cssText.join(”);
elem['{cloneName}'] = className = ‘clone’ + (new Date).getTime();
this._addHeadStyle(‘.’ + className + ‘{‘ + cssText + ‘}’);
return className;
},

// 向页头插入样式
_addHeadStyle: function (content) {
var style = this._style[document];
if (!style) {
style = this._style[document] = document.createElement(‘style’);
document.getElementsByTagName(‘head’)[0].appendChild(style);
};
style.styleSheet && (style.styleSheet.cssText += content) || style.appendChild(document.createTextNode(content));
},
_style: {},

// 获取最终样式
_getStyle: ‘getComputedStyle’ in window ? function (elem, name) {
return getComputedStyle(elem, null)[name];
} : function (elem, name) {
return elem.currentStyle[name];
},

// 获取光标在文本框的位置
_getFocus: function (elem) {
var index = 0;
if (document.selection) {// IE Support
elem.focus();
var Sel = document.selection.createRange();
if (elem.nodeName === ‘TEXTAREA’) {//textarea
var Sel2 = Sel.duplicate();
Sel2.moveToElementText(elem);
var index = -1;
while (Sel2.inRange(Sel)) {
Sel2.moveStart(‘character’);
index++;
};
}
else if (elem.nodeName === ‘INPUT’) {// input
Sel.moveStart(‘character’, -elem.value.length);
index = Sel.text.length;
}
}
else if (elem.selectionStart || elem.selectionStart == ’0′) { // Firefox support
index = elem.selectionStart;
}
return (index);
},

// 获取元素在页面中位置
_offset: function (elem) {
var box = elem.getBoundingClientRect(), doc = elem.ownerDocument, body = doc.body, docElem = doc.documentElement;
var clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0;
var top = box.top + (self.pageYOffset || docElem.scrollTop) – clientTop, left = box.left + (self.pageXOffset || docElem.scrollLeft) – clientLeft;
return {
left: left,
top: top,
right: left + box.width,
bottom: top + box.height
};
}
};

function getPosition(ctrl) {
var p = kingwolfofsky.getInputPositon(ctrl);
document.getElementById(‘show’).style.left = p.left + “px”;
document.getElementById(‘show’).style.top = p.bottom + “px”;
}
[/crayon]

测试页面如下:

此文章转自:http://blog.csdn.net/kingwolfofsky/article/details/6586029

092012
 

今天有朋友问我json操作的相关知识,还是抽空来写篇博客。

还是先讲讲json具体形式吧。

1、对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。(如图所示,图中表示数据的方式是类似非确定性自动机的形式,没学过编译原理的人,可能理解起来困难点,实际上也是正则表达式的形式。下同)

object

2、数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

array

3、值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。

value

4、字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。 字符串(string)与C或者Java的字符串非常相似。

string

5、数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。

number

这里有几种json格式:

json1:

javascript操作:

jQuery操作:

json2:

javascript操作:

jQuery操作:

012012
 

介绍
DOM是Document Object Modeule的缩写,一般来说,DOM操作分成3个方面。
1、DOM Core
DOM Core并不专属于javascript,任何一种支持DOM的程序设计语言都可以使用它,用途也远不止仅限于网页,也可以用来处理任何一种使用标记语言编写出来的文档,如XML。
例如:document,getElementsByTagName(“form”);//使用DOM Core来获取表单对象的方法。
2、HTML-DOM
在使用Javascript和DOM为HTML文件编写脚本时,有许多属于HTML-DOM的属性,HTML-DOM的出现甚至比DOM Core还要早,他提供了一些更简明的记号来描述各种HTML元素的属性。
例如:document.forms //HTML-DOM提供了一个forms对象。
PS:可以看出,获取对象、属性即可以用DOM Core来实现民,也可以用HTML-DOM实现。
3、CSS-DOM
CSS-DOM是针对CSS的操作,在javascript中,CSS-DOM主要的作用是获取和设置style对象的各种属性,由此达到网页呈现出各种不同的效果.
例如:element.style.color=”red”;//设置某元素的字体颜色的方法。

常用方法
1.查找元素节点
var $li = $(“ul li:eq(0)”);//获取ul标记下的第一个li,也可以写成 $(“#ulID li:eq(0)”);

2.查找元素属性
利用jquery的attr()方法来获取元素的各种属性的值,attr()方法的参数可以是一个,也可以是两个。
当参数是一个时,则是要查询的属性名称。
当参数是两个时,则可以设置属性的值。
alert($(“#id”).attr(“title”)); //输出元素的title属性.一个参数
$(“#id”).attr(“title”,”改变title值”); //改变元素的title属性值.二个参数

3.添加元素节点
$(html) 简单说明一下$(html)方法会根据传入的html标记字符串创建一个dom对象,并将这个dom对象包装成一个jquery对象返回,总之就是把标记所有html代码都放到$()工厂里面就行了!
例:

var $htmlLi = $(”  <li title=’香蕉’>香蕉</li>”);  //创建DOM对象
var $ul = $(“ul”); //获取UL对象
$ul.append($htmlLi); //将$htmlLi追加到$ul元素的li列表

下面列出部分插入节点的方法

方法 描述 示例
Append() 向每个匹配的元素内追加内容 HTML代码<ul></ul>JQuery代码$(“ul”).append(“<li>AA</li>”);

结果

<ul>

<li>AA</li>

</ul>

 

appendTo() 该方法和Append()相反,a.Append(b)是将b追加到a中,而appendTo()是将b追求到a HTML代码<ul></ul>JQuery代码$ (“<li>AA</li>”).appendTo (“ul”).;

结果

<ul>

<li>AA</li>

</ul>

 

Prepend() 向每个匹配的元素内部前置内容 HTML代码<p>哈哈</p>JQuery代码$(“p”).prepend(“<b>ABC</b>”);

结果

<p><b>ABC</b>哈哈</p>

prependTo() 该方法和Prepend()相反,a. Prepend (b)是将b前置到a中,而prependTo
()
是将b前置到a
HTML代码<p>哈哈</p>JQuery代码$(“<b>ABC</b>”).prependTo.(“p”);

结果

<p><b>ABC</b>哈哈</p>

After() 在每个匹配的元素之后插入内容,是之后 HTML代码<p>AAA</p>JQuery代码$(“p”).After(“<b>cc</b>”);

结果

<p>AAA</p><b>cc</b>

insertAfter() After()相反 HTML代码<p>AAA</p>JQuery代码$ (“<b>cc</b>”).After(“p”);

结果

<p>AAA</p><b>cc</b>

Before() 在每个匹配的元素之前插入内容 HTML代码<p>AAA</p>JQuery代码$(“p”). Before (“<b>cc</b>”);

结果

<b>cc</b><p>AAA</p>

insertBefore() Before()相反 HTML代码<p>AAA</p>JQuery代码$ (“<b>cc</b>”). insertBefore
(“p”);
结果<b>cc</b><p>AAA</p>

好了,不要斋看,自己动手试试吧:)

4.删除元素节点
由于我们需要经常动态去改变DOM元素,因此Jquery提供了两种删除节点的方法,即remove()和empty();
4.1 remove()方法
$(“p”).remove();// 我们可以获取到要删除的元素,然后调用remove()方法
$(“ul li:eq(0)”).remove().appendTo(“ul”);// 删除ul下面的第一个li标记,然后再把删除的li标记重新加到ul里面,remove()方法返回删除元素的引用,这时你可以继续使用
$(“ul li”).remove(“li[title!=ABC]“);//remove可以接受通过参数来选择性的删除符合条件的元素;
4.2 empty()方法
严格来讲,empty()方法并不是删除元素,而是清空
例:
HTML代码

 <ul>
<li title=”AAA”>AAA</li>
</ul>

JQuery代码
$(“ul li:eq(0)”).empty();
结果

<ul>
<li title=”AAA”></li>
</ul>

记住,只会清空内容,不会请空属性;

文章转自:http://blog.163.com/ganlanfei@126/blog/static/1218198712010118115844618/

222012
 

最近确实是太忙了。

博客都很久没更新了,还是更新一下~~~最近都在做项目ing。。。

还有在烧耳机。。。入手了AKG K540了,还没到,期待。。。

前一段时间有朋友问我关于scrollLeft,scrollTop等问题,放个图吧,这个后面来更新博客详细说明。

好了,就这样吧~

032012
 

前一段时间看一本《高性能网站建设进阶指南》这本书,提到页面中的js并不是同步加载的,这就会导致如果几个js文件是互为牵制的话,可能会造成有未读取到的js没有及时生成元素而报错的问题,而今天也是在网上看到了一篇叫做js同步加载最佳实践的文章,提出了一个能把多个js文件实现同步加载的最佳的办法。

1.方法思路:

a.在页面底部添加一个叫做first的js文件,这个文件里有一个loadScript的方法,这个方法有两个参数一个是url,另一个是返回函数,而这个loadjs的方法则是通过XMLHttpRequest对象readyState的五个状态来为页面添加含有src属性的script代码。

b.在页面中调用这个first.js文件,并在页面底部调用这个方法,需要添加几个js就调用几次。

2.方法代码:

a.编写first.js的loadScript的方法

b.在页面内调用这个脚本文件,并执行loadScript的方法

3.直接把js写在head之间和同步加载的效果对比

注:
参考的文章:为之漫笔(李松峰)写的一篇《readyState的五种状态详解》的文章

文章转自:http://www.xpdesigner.com.cn/wordpress/?cat=6

032012
 
  • JavaScript自增、自减运算符负责为变量加1或减1,JavaScript自增、自减运算符包括++、–。
  • 用自增、自减运算符和运算对象(操作数)连接起来,符合规则的JavaScript语法的式子,称JavaScript自增、自减表达式。

JavaScript自增、自减运算符与表达式语法

运算符 ++i –i i++ i–
名称 前自增运算符 前自减运算符 后自增运算符 后自减运算符
表达式 ++i –i i++ i–
示例 ++i; –i; i++; i–;
i的结果 7 5 7 5
有趣的示例 ++i
alert(i);
alert(++i);
alert(i);
–i
alert(i);
alert(–i);
alert(i);
i++
alert(i);
alert(i++);
alert(i);
i–
alert(i);
alert(i–);
alert(i);
结果 7
8
8
5
4
4
7
7
8
5
5
4

示例解释

前自增运算符与后自增运算符有本质的区别,它们的相同点都是为自身加了1,不同点是前自增运算符是先加1,再使用操作数的值,后自增运算符是先使用操作数的值,再加1。例如:

结果为:
7
7
7
6

以上内容转自:http://www.dreamdu.com/javascript/incrementing_decrementing/