<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>杨福海的博客</title>
	<atom:link href="http://www.yangfuhai.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.yangfuhai.com</link>
	<description>专注移动互联网、软件与现实的完美结合&#124;专注高端互联网营销、嵌入式、云计算。</description>
	<lastBuildDate>Tue, 24 Apr 2012 07:20:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>杨福海：JAVA中文件断点续传之HTTP原理详解</title>
		<link>http://www.yangfuhai.com/54.html</link>
		<comments>http://www.yangfuhai.com/54.html#comments</comments>
		<pubDate>Tue, 24 Apr 2012 07:20:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[互联网]]></category>
		<category><![CDATA[代码之美]]></category>

		<guid isPermaLink="false">http://www.yangfuhai.com/?p=54</guid>
		<description><![CDATA[<p>最近在在公司做的android项目中，用到了断点续传的功能。其实断点续传不是android技术，只是java的HTTP通信技术。我们先来看看在HTTP中是如何实现断点续传的，明白了HTTP原理，代码写起来也就不困难了。由于很久没有写了，在网上找找，总结了一下，也希望对朋友能够有所帮助。</p>
<p>其实断点续传[......]</p><p class='read-more'><a href='http://www.yangfuhai.com/54.html'>继续阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>最近在在公司做的android项目中，用到了断点续传的功能。其实断点续传不是android技术，只是java的HTTP通信技术。我们先来看看在HTTP中是如何实现断点续传的，明白了HTTP原理，代码写起来也就不困难了。由于很久没有写了，在网上找找，总结了一下，也希望对朋友能够有所帮助。</p>
<p>其实断点续传的原理很简单，就是在 Http 的请求上和一般的下载有所不同而已。<br />
打个比方，浏览器请求服务器上的一个文时，所发出的请求如下：<br />
假设服务器域名为<a href="http://www.yangfuhai.com">www.yangfuhai.com</a>，文件名为 down.zip。<br />
GET /down.zip HTTP/1.1<br />
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-<br />
excel, application/msword, application/vnd.ms-powerpoint, */*<br />
Accept-Language: zh-cn<br />
Accept-Encoding: gzip, deflate<br />
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)<br />
Connection: Keep-Alive</p>
<p>服务器收到请求后，按要求寻找请求的文件，提取文件的信息，然后返回给浏览器，返回信息如下：</p>
<p>200<br />
Content-Length=106786028<br />
Accept-Ranges=bytes<br />
Date=Mon, 30 Apr 2001 12:56:11 GMT<br />
ETag=W/”02ca57e173c11:95b”<br />
Content-Type=application/octet-stream<br />
Server=Microsoft-IIS/6.0<br />
Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT</p>
<p>所谓断点续传，也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给 Web 服务器的时候要多加一条信息 &#8212; 从哪里开始。<br />
下面是用自己编的一个”浏览器”来传递请求信息给 Web 服务器，要求从 2000070 字节开始。<br />
GET /down.zip HTTP/1.0<br />
User-Agent: NetFox<br />
RANGE: bytes=2000070-<br />
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2</p>
<p>仔细看一下就会发现多了一行 RANGE: bytes=2000070-<br />
这一行的意思就是告诉服务器 down.zip 这个文件从 2000070 字节开始传，前面的字节不用传了。<br />
服务器收到这个请求以后，返回的信息如下：<br />
206<br />
Content-Length=106786028<br />
Content-Range=bytes 2000070-106786027/106786028<br />
Date=Mon, 30 Apr 2001 12:55:20 GMT<br />
ETag=W/”02ca57e173c11:95b”<br />
Content-Type=application/octet-stream<br />
Server=Microsoft-IIS/5.0<br />
Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT</p>
<p>和前面服务器返回的信息比较一下，就会发现增加了一行：<br />
Content-Range=bytes 2000070-106786027/106786028<br />
返回的代码也改为 206 了，而不再是 200 了。</p>
<p>知道了以上原理，就可以进行断点续传的编程了。过几天代码写完后，我会发放出来共享。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yangfuhai.com/54.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Andorid Ubuntu 11.4 中安装sun-java5-jdk</title>
		<link>http://www.yangfuhai.com/74.html</link>
		<comments>http://www.yangfuhai.com/74.html#comments</comments>
		<pubDate>Thu, 01 Mar 2012 12:23:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[网络技术]]></category>
		<category><![CDATA[转载文章]]></category>

		<guid isPermaLink="false">http://www.yangfuhai.com/?p=74</guid>
		<description><![CDATA[<p>由于Ubuntu 高版本不再支持sun-java5-jdk，所以使用自带的更新工具是无法更新到 sun-java5-jdk的，因此需要手动添加更新源，我使用的是 163的镜像源，速度很快.</p>
<p>&#160;</p>
<p>步骤如下：</p>
<p>1.运行命令 sudo gedit /etc/apt/sources.list</p>
<p>2.[......]</p><p class='read-more'><a href='http://www.yangfuhai.com/74.html'>继续阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>由于Ubuntu 高版本不再支持sun-java5-jdk，所以使用自带的更新工具是无法更新到 sun-java5-jdk的，因此需要手动添加更新源，我使用的是 163的镜像源，速度很快.</p>
<p>&nbsp;</p>
<p>步骤如下：</p>
<p>1.运行命令 sudo gedit /etc/apt/sources.list</p>
<p>2.打开 sources.list 后在最后添加 deb http://mirrors.163.com/ubuntu/ hardy main multiverse 保存关闭</p>
<p>3.运行命令 sudo apt-get update</p>
<p>4.运行命令 sudo apt-get install sun-java5-jdk 就可以下载安装 java5</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yangfuhai.com/74.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>高手之路：必掌握的10个经典的Android开源应用项目</title>
		<link>http://www.yangfuhai.com/65.html</link>
		<comments>http://www.yangfuhai.com/65.html#comments</comments>
		<pubDate>Fri, 09 Dec 2011 05:09:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[转载文章]]></category>
		<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://www.yangfuhai.com/?p=65</guid>
		<description><![CDATA[<p>Android开发又将带来新一轮热潮，很多开发者都投入到这个浪潮中去了，创造了许许多多相当优秀的应用。其中也有许许多多的开发者提供了应用开 源项目，贡献出他们的智慧和创造力。学习开源代码是掌握技术的一个最佳方式。下面推荐几个应用开源项目，这些项目不仅提供了优秀的创意，也可以直接掌握 Android内[......]</p><p class='read-more'><a href='http://www.yangfuhai.com/65.html'>继续阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>Android开发又将带来新一轮热潮，很多开发者都投入到这个浪潮中去了，创造了许许多多相当优秀的应用。其中也有许许多多的开发者提供了应用开 源项目，贡献出他们的智慧和创造力。学习开源代码是掌握技术的一个最佳方式。下面推荐几个应用开源项目，这些项目不仅提供了优秀的创意，也可以直接掌握 Android内核的接口使用：1、Android团队提供的示例项目</p>
<p>如果不是从学习Android SDK中提供的那些样例代码开始，可能没有更好的方法来掌握在Android这个框架上开发。由Android的核心开发团队提供了15个优秀的示例项目，包含了游戏、图像处理、时间显示、开始菜单快捷方式等。<br />
地址：<a href="http://code.google.com/p/apps-for-android/" target="_blank">http://code.google.com/p/apps-for-android/</a></p>
<p>2、 Remote Droid</p>
<p>RemoteDroid是一个Android应用，能够让用户使用自己的无线网络使用无线键盘、触摸屏操作手机。这个项目为开发者提供了如网络连接、触摸屏手指运动等很好的样例。<br />
地址：<a href="http://code.google.com/p/remotedroid/" target="_blank">http://code.google.com/p/remotedroid/</a></p>
<p>3、 TorProxy和Shadow</p>
<p>TorProxy应用实现了Android手机无线电电传通讯(TOR)，和Shadow应用一起使用，可以使用手机匿名上网。从该项目源代码中，可以掌握socket连接、管理cookie等方法。<br />
地址：<a href="http://www.cl.cam.ac.uk/research/dtg/code/svn/android-tor/" target="_blank">http://www.cl.cam.ac.uk/research/dtg/code/svn/android-tor/</a></p>
<p>4、 Android SMSPopup</p>
<p>SMSPopup可以截获短信内容显示在一个泡泡形状的窗口中。从这个项目中可以掌握到如何使用内置的短信SMS接口。<br />
地址：<a href="http://code.google.com/p/android-smspopup/" target="_blank">http://code.google.com/p/android-smspopup/</a></p>
<p>5、 Standup Timer</p>
<p>Standup Timer应用用于控制站立会议时间，类似秒表倒计时，可以提醒每个人的讲话时间已到，从而保证每个与会者使用时间一样。从该项目的代码中，可以学会如何使用时间函数。另外，这个项目的代码是采用视图view、模型model严格分离的设计思路。<br />
地址：<a href="http://github.com/jwood/standup-timer" target="_blank">http://github.com/jwood/standup-timer</a></p>
<p>6、 Foursquare</p>
<p>是Foursquare.com的一个客户端应用，该应用主要分为两个模块：API(com.joelapenna.foursquare)和界面前端 (com.joelapenna.foursquared)两部分。从该项目代码中，可以学会如何同步、多线程、HTTP连接等技术。<br />
地址：<a href="http://code.google.com/p/foursquared/" target="_blank">http://code.google.com/p/foursquared/</a></p>
<p>7、 Pedometer</p>
<p>Pedometer应用用于记录你每天走路步数的。尽管记录不一定精准，但是从这个项目中，可以学习几个不同的技术：加速器交互、语音更新、后台运行服务等。<br />
地址：<a href="http://code.google.com/p/pedometer/" target="_blank">http://code.google.com/p/pedometer/</a></p>
<p>8、 OpenSudoku-android</p>
<p>OpenSudoku是一个简单的九宫格数独游戏。从代码中可以学习到如何在视图中显示表格数据，以及如何和一个网站交互等技术。<br />
地址：<a href="http://code.google.com/p/opensudoku-android/" target="_blank">http://code.google.com/p/opensudoku-android/</a></p>
<p>9、 ConnectBot</p>
<p>ConnectBot是Android平台的一个客户端安全壳应用。从该项目代码中，可以学习到很多Android安全方面的内容，这些是你在开发应用时经常需要考虑的安全问题。<br />
地址：<a href="http://code.google.com/p/connectbot/" target="_blank">http://code.google.com/p/connectbot/</a></p>
<p>10、 WordPress的Android应用</p>
<p>当然在最后不能不提WordPress的Android应用了，这是WordPress官方开发团队提供的一个项目。从代码中可以学习到XMLRPC调用（当然还有更多的优秀内容）。<br />
地址：<a href="http://android.svn.wordpress.org/trunk/" target="_blank">http://android.svn.wordpress.org/trunk/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yangfuhai.com/65.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>技术+设计 正成为初创企业的竞争优势</title>
		<link>http://www.yangfuhai.com/61.html</link>
		<comments>http://www.yangfuhai.com/61.html#comments</comments>
		<pubDate>Tue, 29 Nov 2011 01:48:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[互联网]]></category>
		<category><![CDATA[转载文章]]></category>

		<guid isPermaLink="false">http://www.yangfuhai.com/?p=61</guid>
		<description><![CDATA[<p>技术型创始人已成为高科技初创企业的先决条件，而现今设计型创始人也在崛起——这一双雄组合将彻底改变高科技世界。</p>
<p>下面这段节选自Daniel Pink的《A Whole New Mind》一书：</p>
<p><em>过去的几十年属于拥有某一类思维的某一类人——会写代码的电脑程序员、会起草合约的律师、擅于数字的MBA。但王国[......]</em></p><p class='read-more'><a href='http://www.yangfuhai.com/61.html'>继续阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>技术型创始人已成为高科技初创企业的先决条件，而现今设计型创始人也在崛起——这一双雄组合将彻底改变高科技世界。</p>
<p>下面这段节选自Daniel Pink的《A Whole New Mind》一书：</p>
<p><em>过去的几十年属于拥有某一类思维的某一类人——会写代码的电脑程序员、会起草合约的律师、擅于数字的MBA。但王国的钥匙正在易手。未来属于拥有迥异思维的很不一样的人——创造者和移情者(empathizers)、模式辨认者和意义表达者。这些人——艺术家、发明家、设计师、说故事的人、提供照料的人、抚慰别人的人、思考大局的人——会收获社会最丰厚的回报并分享最大的快乐。</em></p>
<p>尽管我们同意Daniel Pink所言及其前提，但我们绝不因此贬低技术型创始人的角色。我们非常推崇工程师/黑客(也就是技术型创始人)，相信他们“自身的”才华对新科技复兴至关重要。我们的任务是要突出崛起的技术和设计双雄的重要性和机会。我们坚信两者同等重要。现在技术初创企业的创始人寻求人才时，既在寻找工程师，也在不遗余力地寻找设计师（至少在我们的经验里是这样）。这主要是因为技术型创始人在创办公司时多半意识到：创造出类拔萃的用户体验是个竞争优势。把“设计型创始人”混合进来会成为很有潜力的“黑天鹅”：难以预测，但会改变世界——极有可能重新定义高科技世界。</p>
<p>但优秀的初创设计师人才不足，缺乏既有互动和产品设计经验，又有技能的人。现在设计师要做的不仅是制作图片然后交给工程师，他们还要成为用户研究（客户开发）、信息架构（IA）、互动设计（IxD）、视觉设计和讲故事（文本写作和传达）方面的专家。他们还要有后台方面的技能，彻底理解产品背后的技术。同等重要的还有，他们要有大局观，了解用户体验是围绕商业模式而建立的，包括营销、渠道、客户支持、销售、业务发展和运营等。</p>
<p>把以用户为中心的设计引入敏捷的开发流程，新一代初创企业由此诞生了。设计不再是一种策略，而被高科技主流认作是初创过程的战略组成部分。尽管一直被认为具有战略意义，但直到最近才真正和现实走在一起（看看Apple, IDEO, Target, Design Within Reach &amp; Coca Cola）。 他们是全脑型人才，用右脑创造体验，用左脑分析经验数据。</p>
<p>这种类型的创始人注重感知初创企业的战略构成，通过用户指标、客户指标、产品流向、和转换渠道走向客户。另外，他们还善于交际。他们更懂得理解用户行为并移情于用户，而不是不断地维护自己的创意产出。设计型创始人开创了新的市场，重塑了现有市场，正创造一种“不公平优势”。用户体验驱动的创新很有可能会给进化中的初创世界带来大范围的改变（及经济上的成功）。初创成本越来越低，线上和移动服务的全球市场大大扩大，再加更廉价的线上发布，创建更好的用户体验会成为未来之路。</p>
<p>总之：从信息时代步入概念时代后，我们要创造非同一般的产品体验。</p>
<p>via <a href="http://venturebeat.com/2011/10/05/design-is-becoming-a-competitive-advantage-for-startups/" rel="external nofollow" target="_blank">venturebeat</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yangfuhai.com/61.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>钱不是万能的，5个让你的核心员工保持快乐的方法</title>
		<link>http://www.yangfuhai.com/58.html</link>
		<comments>http://www.yangfuhai.com/58.html#comments</comments>
		<pubDate>Sat, 26 Nov 2011 12:55:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[演讲与口才]]></category>
		<category><![CDATA[生活点滴]]></category>
		<category><![CDATA[管理之道]]></category>
		<category><![CDATA[转载文章]]></category>

		<guid isPermaLink="false">http://www.yangfuhai.com/?p=58</guid>
		<description><![CDATA[<p>编者按：本文由创业公司<a href="http://rypple.com/" rel="external nofollow" target="_blank">Rypple</a>共同创始人Daniel Debow<a href="http://gigaom.com/collaboration/5-ways-to-keep-your-rockstar-employees-happy/" rel="external nofollow" target="_blank">撰写</a>。</p>
<p>朋友们，有没有人以为单靠优厚的待遇就能使员工为你卖力的工作的？Google的待遇是出了名的好，但是在今年年初的一次调查中，他们却发现员工最看重的并不是那些可以随意吃的水果，免费的理发，按摩甚至是医疗服务等，而是“能够有机会和[......]</p><p class='read-more'><a href='http://www.yangfuhai.com/58.html'>继续阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>编者按：本文由创业公司<a href="http://rypple.com/" rel="external nofollow" target="_blank">Rypple</a>共同创始人Daniel Debow<a href="http://gigaom.com/collaboration/5-ways-to-keep-your-rockstar-employees-happy/" rel="external nofollow" target="_blank">撰写</a>。</p>
<p>朋友们，有没有人以为单靠优厚的待遇就能使员工为你卖力的工作的？Google的待遇是出了名的好，但是在今年年初的一次调查中，他们却发现员工最看重的并不是那些可以随意吃的水果，免费的理发，按摩甚至是医疗服务等，而是“能够有机会和最为核心的高层接触，有一对一的会面，遇到问题时能够获得他们的指导，生活和职业上也能获得他们的关心”。</p>
<p>单靠薪水和福利并不能保证你公司最优秀的员工忠诚的为你工作。最近Arnold Worldwide对广告传媒行业3000名员工和500名管理人员的调研就发现30%的人说12个月内自己将更换工作。Jill是X传媒花高价从竞争对手那里挖过来的。她做得也非常的不错，报酬也好，但是由于没有机会很好的和高层沟通使得自己一直对于工作感到非常的不确定，最后的结果是她辞职了。</p>
<p>那么如何才能使你最优秀的员工忠诚的为你工作呢？以下5点非常值得深思：</p>
<p><strong>1.创建一种教育文化</strong></p>
<p>对于员工来说，留在你公司最重要的一个因素就是自己能不断的学习成长。但是最近的一份调查却显示管理层与员工对于公司培训的理解有天壤之别，90%的员工认为自己是在独立解决问题的过程中学习的，但是认同这一说法的管理人员却只有25%。</p>
<p>因此，要想使得你的员工不断的被激励着努力工作，那么你要创建一种学习文化。为他们提供培训，让他们知道自己辞职的时候会成长许多。</p>
<p><strong>2.提供常规的，连贯的反馈</strong></p>
<p>反馈机制非常的重要。但是来自Leadership IQ的一份调查却显示53%的员工觉得自己被老板表扬后获得的反馈无法让自己下次再持续这样的优秀业绩；65%的员工说自己被老板批评后获得的反馈信息也无法有效的帮助他们改正自己的错误。</p>
<p>事情发生后，有效及时并具备建设性的反馈非常重要。如果等到一个月以后你再给反馈，那时的环境已经变了，员工恐怕也无法受到该反馈的积极影响了。</p>
<p><strong>3.抽空每周进行一对一的会面</strong></p>
<p>初听起来你可能会觉得会议太多了，但是一对一的会面有可能是你留住你最优秀的员工最重要的方式。</p>
<p>在Google进行的最佳管理人员调查中发现，表现较差的管理人员对一对一会面的机制执行不连贯：有些只与表现不好的员工谈话，而有些却只与表现优秀的员工谈话。于是接下来他们进行了改善，即经理人员要让所有的团队成员都有一对一谈话的机会。</p>
<p>事实上，这种比较近距离的谈话中什么都可以谈包括即将开展的项目，最近客户的消息等等。而且也正是在这些谈话中管理人员可以很好的知悉员工对项目的看法，员工的个人感受等等。</p>
<p><strong>4.恰当的管理乏味的项目</strong></p>
<p>工作过程中不是每一个项目都会非常有趣，有些项目本身就很单调乏味，这时管理人员就需要恰当并负责的处理这样的事情了。</p>
<p>比如说鼓励员工“我们把这个项目做好了，我们的产品在明年年初才能以优秀的面貌出现在市场上”。另外也可以在乏味的工作中加入一些其他激励性因素，降低其乏味度。</p>
<p><strong>5.公开赞扬员工的优秀表现</strong></p>
<p>很多经理人员太过看重物质补贴的魅力了，须不知金钱有时候并不是鼓励员工最为有效的方式。09年麦肯锡就最激励员工的因素进行的一项调查显示，排在前两位的分别是“直接领导的公开赞扬”和“领导的注意”。</p>
<p>此外，在赞扬方面，公开赞扬也比私下赞扬对员工的正面影响要放大许多倍。因为这时你创造的不仅仅是你个人对员工的认同，更是整个团队对该员工的认同。</p>
<p>留住最优秀的人才始终是一个公司管理人员最为重要的工作之一。不要以为经济不景气，你的员工不敢辞职。既然肯花高价从市场上挖来非常优秀的人才，那么为什么不能再多做一点工作让他们真正的安下心来，忠心的为你的公司创造价值呢？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yangfuhai.com/58.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>杨福海：java技术断点续传之HTTP原理详解</title>
		<link>http://www.yangfuhai.com/55.html</link>
		<comments>http://www.yangfuhai.com/55.html#comments</comments>
		<pubDate>Thu, 11 Aug 2011 02:40:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[互联网]]></category>
		<category><![CDATA[代码之美]]></category>

		<guid isPermaLink="false">http://www.yangfuhai.com/?p=55</guid>
		<description><![CDATA[<p>最近在在公司做的android项目中，用到了断点续传的功能。其实断点续传不是android技术，只是java的HTTP通信技术。我们先来看看在HTTP中是如何实现断点续传的，明白了HTTP原理，代码写起来也就不困难了。由于很久没有写了，在网上找找，总结了一下，也希望对朋友能够有所帮助。</p>
<p>其实断点续传[......]</p><p class='read-more'><a href='http://www.yangfuhai.com/55.html'>继续阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>最近在在公司做的android项目中，用到了断点续传的功能。其实断点续传不是android技术，只是java的HTTP通信技术。我们先来看看在HTTP中是如何实现断点续传的，明白了HTTP原理，代码写起来也就不困难了。由于很久没有写了，在网上找找，总结了一下，也希望对朋友能够有所帮助。</p>
<p>其实断点续传的原理很简单，就是在 Http 的请求上和一般的下载有所不同而已。 <br />
打个比方，浏览器请求服务器上的一个文时，所发出的请求如下： <br />
假设服务器域名为<a href="http://www.yangfuhai.com/">www.yangfuhai.com</a>，文件名为 down.zip。 <br />
GET /down.zip HTTP/1.1 <br />
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms- <br />
excel, application/msword, application/vnd.ms-powerpoint, */* <br />
Accept-Language: zh-cn <br />
Accept-Encoding: gzip, deflate <br />
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) <br />
Connection: Keep-Alive</p>
<p>服务器收到请求后，按要求寻找请求的文件，提取文件的信息，然后返回给浏览器，返回信息如下：</p>
<p>200 <br />
Content-Length=106786028 <br />
Accept-Ranges=bytes <br />
Date=Mon, 30 Apr 2001 12:56:11 GMT <br />
ETag=W/”02ca57e173c11:95b” <br />
Content-Type=application/octet-stream <br />
Server=Microsoft-IIS/6.0 <br />
Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT</p>
<p>所谓断点续传，也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给 Web 服务器的时候要多加一条信息 &#8212; 从哪里开始。 <br />
下面是用自己编的一个”浏览器”来传递请求信息给 Web 服务器，要求从 2000070 字节开始。 <br />
GET /down.zip HTTP/1.0 <br />
User-Agent: NetFox <br />
RANGE: bytes=2000070- <br />
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2</p>
<p>仔细看一下就会发现多了一行 RANGE: bytes=2000070- <br />
这一行的意思就是告诉服务器 down.zip 这个文件从 2000070 字节开始传，前面的字节不用传了。 <br />
服务器收到这个请求以后，返回的信息如下： <br />
206 <br />
Content-Length=106786028 <br />
Content-Range=bytes 2000070-106786027/106786028 <br />
Date=Mon, 30 Apr 2001 12:55:20 GMT <br />
ETag=W/”02ca57e173c11:95b” <br />
Content-Type=application/octet-stream <br />
Server=Microsoft-IIS/5.0 <br />
Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT</p>
<p>和前面服务器返回的信息比较一下，就会发现增加了一行： <br />
Content-Range=bytes 2000070-106786027/106786028 <br />
返回的代码也改为 206 了，而不再是 200 了。</p>
<p>知道了以上原理，就可以进行断点续传的编程了。过几天代码写完后，我会发放出来共享。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yangfuhai.com/55.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>整理了一下jquery的方法大全</title>
		<link>http://www.yangfuhai.com/49.html</link>
		<comments>http://www.yangfuhai.com/49.html#comments</comments>
		<pubDate>Mon, 08 Aug 2011 12:53:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[代码之美]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.yangfuhai.com/?p=49</guid>
		<description><![CDATA[<p>jQuery由美国人John Resig创建，至今已吸引了来自世界各地的众多javascript高手加入其team，包括来自德国的J&#38;ouml;rn Zaefferer，罗马尼亚的Stefan Petre等等。jQuery是继prototype之后又一个优秀的Javascrīpt框架。其宗旨[......]</p><p class='read-more'><a href='http://www.yangfuhai.com/49.html'>继续阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>jQuery由美国人John Resig创建，至今已吸引了来自世界各地的众多javascript高手加入其team，包括来自德国的J&amp;ouml;rn Zaefferer，罗马尼亚的Stefan Petre等等。jQuery是继prototype之后又一个优秀的Javascrīpt框架。其宗旨是——WRITE LESS,DO MORE,写更少的代码,做更多的事情。</p>
<p>Attribute：<br />
$(”p”).addClass(<strong>css</strong>中定义的样式<strong>类</strong>型); 给某个元素添加样式<br />
$(”img”).attr({src:”test.jpg”,alt:”test Image”}); 给某个元素添加属性/值，参数是map<br />
$(”img”).attr(”src”,”test.jpg”); 给某个元素添加属性/值<br />
$(”img”).attr(”title”, function() { return this.src }); 给某个元素添加属性/值<br />
$(”元素名称”).html(); 获得该元素内的内容（元素，文本等）<br />
$(”元素名称”).html(”&lt;b&gt;new stuff&lt;/b&gt;”); 给某元素设置内容<br />
$(”元素名称”).removeAttr(”属性名称”) 给某元素删除指定的属性以及该属性的值<br />
$(”元素名称”).removeClass(”class”) 给某元素删除指定的样式<br />
$(”元素名称”).text(); 获得该元素的文本<br />
$(”元素名称”).text(value); 设置该元素的文本值为value<br />
$(”元素名称”).toggleClass(class) 当元素存在参数中的样式的时候取消,如果不存在就设置此样式<br />
$(”input元素名称”).val(); 获取input元素的值<br />
$(”input元素名称”).val(value); 设置input元素的值为value<br />
Manipulation：<br />
$(”元素名称”).after(content); 在匹配元素后面添加内容<br />
$(”元素名称”).append(content); 将content作为元素的内容插入到该元素的后面<br />
$(”元素名称”).appendTo(content); 在content后接元素<br />
$(”元素名称”).before(content); 与after<strong>方法</strong>相反<br />
$(”元素名称”).clone(布尔表达式) 当布尔表达式为真时，克隆元素（无参时，当作true处理）<br />
$(”元素名称”).empty() 将该元素的内容设置为空<br />
$(”元素名称”).insertAfter(content); 将该元素插入到content之后<br />
$(”元素名称”).insertBefore(content); 将该元素插入到content之前<br />
$(”元素”).prepend(content); 将content作为该元素的一部分，放到该元素的最前面<br />
$(”元素”).prependTo(content); 将该元素作为content的一部分，放content的最前面<br />
$(”元素”).remove(); 删除所有的指定元素<br />
$(”元素”).remove(”exp”); 删除所有含有exp的元素<br />
$(”元素”).wrap(”html”); 用html来包围该元素<br />
$(”元素”).wrap(element); 用element来包围该元素<br />
Traversing：<br />
add(expr)<br />
add(html)<br />
add(elements)<br />
children(expr)<br />
contains(str)<br />
end()<br />
filter(expression)<br />
filter(filter)<br />
find(expr)<br />
is(expr)<br />
next(expr)<br />
not(el)<br />
not(expr)<br />
not(elems)<br />
parent(expr)<br />
parents(expr)<br />
prev(expr)<br />
siblings(expr)</p>
<p>Core：<br />
$(html).appendTo(”body”) 相当于在body中写了一段html<strong>代码</strong><br />
$(elems) 获得<strong>DOM</strong>上的某个元素<br />
$(function(){……..}); 执行一个<strong>函数</strong><br />
$(”div &gt; p”).css(”border”, “1px solid gray”); 查找所有div的子节点p，添加样式<br />
$(”input:radio”, document.forms[0]) 在当前页面的第一个<strong>表单</strong>中查找所有的单选按钮<br />
$.extend(prop) prop是一个<strong>jquery</strong><strong>对象</strong>，<br />
举例：<br />
jQuery.extend({<br />
min: function(a, b) { return a &lt; b ? a : b; },<br />
max: function(a, b) { return a &gt; b ? a : b; }<br />
});<br />
jQuery( expression, [context] ) —$( expression, [context]); 在默认情况下，$()查询的是当前HTML文档中的DOM元素。</p>
<p>each( callback ) 以每一个匹配的元素作为上下文来执行一个函数<br />
举例：1<br />
$(”span”).click(function){<br />
$(”li”).each(function(){<br />
$(this).toggleClass(”example”);<br />
});<br />
});<br />
举例：2<br />
$(”button”).click(function () {<br />
$(”div”).each(function (index, domEle) {<br />
// domEle == this<br />
$(domEle).css(”backgroundColor”, “yellow”);<br />
if ($(this).is(”#stop”)) {<br />
$(”span”).text(”Stopped at div index #” + index);<br />
return false;<br />
}<br />
});<br />
});<br />
jQuery Event:</p>
<p>ready(fn); $(document).ready()注意在body中没有onload事件，否则该函数不能执行。在每个页面中可以<br />
有很多个函数被加载执行，按照fn的顺序来执行。<br />
bind( type, [data], fn ) 为每一个匹配元素的特定事件（像click）绑定一个或多个事件处理器函数。可能的事件属性有：blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove,<br />
mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress,<br />
keyup, error<br />
one( type, [data], fn ) 为每一个匹配元素的特定事件（像click）绑定一个或多个事件处理器函数。在每个对<br />
象上，这个事件处理函数只会被执行一次。其他规则与bind()函数相同。</p>
<p>trigger( type, [data] ) 在每一个匹配的元素上触发某类事件。<br />
triggerHandler( type, [data] ) 这一特定方法会触发一个元素上特定的事件(指定一个事件类型)，同时取消<strong>浏览器</strong>对此事件的默认行动<br />
unbind( [type], [data] ) 反绑定，从每一个匹配的元素中删除绑定的事件。<br />
$(”p”).unbind() 移除所有段落上的所有绑定的事件<br />
$(”p”).unbind( “click” ) 移除所有段落上的click事件<br />
hover( over, out ) over,out都是方法, 当鼠标移动到一个匹配的元素上面时，会触发指定的第一个函数。当鼠标移出这个元素时，会触发指定的第二个函数。<br />
$(”p”).hover(function(){<br />
$(this).addClass(”over”);<br />
},<br />
function(){<br />
$(this).addClass(”out”);<br />
}<br />
);</p>
<p>toggle( fn, fn ) 如果点击了一个匹配的元素，则触发指定的第一个函数，当再次点击同一元素时，则触发指定的第二个函数。<br />
$(”p”).toggle(function(){<br />
$(this).addClass(”selected”);<br />
},<br />
function(){<br />
$(this).removeClass(”selected”);<br />
}<br />
);</p>
<p>元素事件列表说明<br />
注：不带参数的函数，其参数为可选的 fn。jQuery不支持form元素的reset事件。<br />
事件 描述 支持元素或对象<br />
blur( ) 元素失去焦点 a, input, textarea, button, select, label, map, area<br />
change( ) 用户改变域的内容 input, textarea, select<br />
click( ) 鼠标点击某个对象 几乎所有元素<br />
dblclick( ) 鼠标双击某个对象 几乎所有元素<br />
error( ) 当加载文档或图像时发生某个错误 window, img<br />
focus( ) 元素获得焦点 a, input, textarea, button, select, label, map, area<br />
keydown( ) 某个键盘的键被按下 几乎所有元素<br />
keypress( ) 某个键盘的键被按下或按住 几乎所有元素<br />
keyup( ) 某个键盘的键被松开 几乎所有元素<br />
load( fn ) 某个页面或图像被完成加载 window, img<br />
mousedown( fn ) 某个鼠标按键被按下 几乎所有元素<br />
mousemove( fn ) 鼠标被移动 几乎所有元素<br />
mouseout( fn ) 鼠标从某元素移开 几乎所有元素<br />
mouseover( fn ) 鼠标被移到某元素之上 几乎所有元素<br />
mouseup( fn ) 某个鼠标按键被松开 几乎所有元素<br />
resize( fn ) 窗口或<strong>框架</strong>被调整尺寸 window, iframe, frame<br />
scroll( fn ) 滚动文档的可视部分时 window<br />
select( ) 文本被选定 document, input, textarea<br />
submit( ) 提交按钮被点击 form<br />
unload( fn ) 用户退出页面 window</p>
<p>JQuery Ajax 方法说明:</p>
<p>load( url, [data], [callback] ) 装入一个远程HTML内容到一个DOM结点。<br />
$(”#<strong>feeds</strong>”).load(”feeds.html”); 将feeds.html<strong>文件</strong>载入到id为feeds的div中<br />
$(”#feeds”).load(”feeds.php”, {limit: 25}, function(){<br />
alert(”The last 25 entries in the feed have been loaded”);<br />
});</p>
<p>jQuery.get( url, [data], [callback] ) 使用GET请求一个页面。<br />
$.get(”test.cgi”, { name: “John”, time: “2pm” }, function(data){<br />
alert(”Data Loaded: ” + data);<br />
});</p>
<p>jQuery.getJSON( url, [data], [callback] ) 使用GET请求JSON数据。<br />
$.getJSON(”test.js”, { name: “John”, time: “2pm” }, function(json){<br />
alert(”JSON Data: ” + json.users[3].name);<br />
});</p>
<p>jQuery.getScript( url, [callback] ) 使用GET请求<strong>javascript</strong>文件并执行。<br />
$.getScript(”test.js”, function(){<br />
alert(”Script loaded and executed.”);<br />
});<br />
jQuery.post( url, [data], [callback], [type] ) 使用POST请求一个页面。</p>
<p>ajaxComplete( callback ) 当一个AJAX请求结束后，执行一个函数。这是一个Ajax事件<br />
$(”#msg”).ajaxComplete(function(request, settings){<br />
$(this).append(”&lt;li&gt;Request Complete.&lt;/li&gt;”);<br />
});<br />
ajaxError( callback ) 当一个AJAX请求失败后，执行一个函数。这是一个Ajax事件<br />
$(”#msg”).ajaxError(function(request, settings){<br />
$(this).append(”&lt;li&gt;Error requesting page ” + settings.url + “&lt;/li&gt;”);<br />
});</p>
<p>ajaxSend( callback ) 在一个AJAX请求发送时，执行一个函数。这是一个Ajax事件<br />
$(”#msg”).ajaxSend(function(evt, request, settings){<br />
$(this).append(”&lt;li&lt;Starting request at ” + settings.url<br />
+ “&lt;/li&lt;”);<br />
});</p>
<p>ajaxStart( callback ) 在一个AJAX请求开始但还没有激活时，执行一个函数。这是一个Ajax事件<br />
当AJAX请求开始(并还没有激活时)显示loading信息<br />
$(”#loading”).ajaxStart(function(){<br />
$(this).show();<br />
});</p>
<p>ajaxStop( callback ) 当所有的AJAX都停止时，执行一个函数。这是一个Ajax事件<br />
当所有AJAX请求都停止时，隐藏loading信息。<br />
$(”#loading”).ajaxStop(function(){<br />
$(this).hide();<br />
});</p>
<p>ajaxSuccess( callback ) 当一个AJAX请求成功完成后，执行一个函数。这是一个Ajax事件<br />
当AJAX请求成功完成时，显示信息。<br />
$(”#msg”).ajaxSuccess(function(evt, request, settings){<br />
$(this).append(”&lt;li&gt;Successful Request!&lt;/li&gt;”);<br />
});</p>
<p>jQuery.ajaxSetup( options ) 为所有的AJAX请求进行全局设置。查看$.ajax函数取得所有选项信息。<br />
设置默认的全局AJAX请求选项。<br />
$.ajaxSetup({<br />
url: “/<strong>xml</strong>http/”,<br />
global: false,<br />
type: “POST”<br />
});<br />
$.ajax({ data: myData });</p>
<p>serialize( ) 以名称和值的方式连接一组input元素。实现了正确表单元素序列<br />
function showValues() {<br />
var str = $(”form”).serialize();<br />
$(”#results”).text(str);<br />
}<br />
$(”:checkbox, :radio”).click(showValues);<br />
$(”select”).change(showValues);<br />
showValues();</p>
<p>serializeArray( ) 连接所有的表单和表单元素(类似于.serialize()方法)，但是返回一个JSON数据格式。<br />
从form中取得一组值，显示出来<br />
function showValues() {<br />
var fields = $(”:input”).serializeArray();<br />
alert(fields);<br />
$(”#results”).empty();<br />
jQuery.each(fields, function(i, field){<br />
$(”#results”).append(field.value + ” “);<br />
});<br />
}<br />
$(”:checkbox, :radio”).click(showValues);<br />
$(”select”).change(showValues);<br />
showValues();</p>
<p>JQuery Effects 方法说明</p>
<p>show( ) 显示隐藏的匹配元素。<br />
show( speed, [callback] ) 以优雅的动画显示所有匹配的元素，并在显示完成后可选地触发一个回调函数。<br />
hide( ) 隐藏所有的匹配元素。<br />
hide( speed, [callback] ) 以优雅的动画隐藏所有匹配的元素，并在显示完成后可选地触发一个回调函数<br />
toggle( ) 切换元素的可见状态。如果元素是可见的，切换为隐藏的；如果元素是隐藏的，<br />
切换为可见的。<br />
slideDown( speed, [callback] ) 通过高度变化（向下增大）来动态地显示所有匹配的元素，在显示完成后可选<br />
地触发一个回调函数。这个动画效果只调整元素的高度，可以使匹配的元素以<br />
“滑动”的方式显示出来。<br />
slideUp( speed, [callback] ) 通过高度变化（向上减小）来动态地隐藏所有匹配的元素，在隐藏完成后可选地<br />
触发一个回调函数。这个动画效果只调整元素的高度，可以使匹配的元素以”滑动”<br />
的方式隐藏起来。<br />
slideToggle( speed, [callback] ) 通过高度变化来切换所有匹配元素的可见性，并在切换完成后可选地触发一个回<br />
调函数。 这个动画效果只调整元素的高度，可以使匹配的元素以”滑动”的方式隐<br />
藏或显示。<br />
fadeIn( speed, [callback] ) 通过不透明度的变化来实现所有匹配元素的淡入效果，并在动画完成后可选地触<br />
发一个回调函数。 这个动画只调整元素的不透明度，也就是说所有匹配的元素的<br />
高度和宽度不会发生变化。<br />
fadeOut( speed, [callback] ) 通过不透明度的变化来实现所有匹配元素的淡出效果，并在动画完成后可选地触<br />
发一个回调函数。 这个动画只调整元素的不透明度，也就是说所有匹配的元素的<br />
高度和宽度不会发生变化。<br />
fadeTo( speed, opacity, [callback] ) 把所有匹配元素的不透明度以渐进方式调整到指定的不透明度，并在动画完成<br />
后可选地触发一个回调函数。 这个动画只调整元素的不透明度，也就是说所<br />
有匹配的元素的高度和宽度不会发生变化。<br />
stop( ) 停止所有匹配元素当前正在运行的动画。如果有动画处于队列当中，他们就会立即开始。<br />
queue( ) 取得第一个匹配元素的动画序列的<strong>引用</strong>(返回一个内容为函数的<strong>数组</strong>)<br />
queue( callback ) 在每一个匹配元素的事件序列的末尾添加一个可执行函数，作为此元素的事件函数<br />
queue( queue ) 以一个新的动画序列代替所有匹配元素的原动画序列<br />
dequeue( ) 执行并移除动画序列前端的动画<br />
animate( params, [duration], [easing], [callback] ) 用于创建自定义动画的函数。<br />
animate( params, options ) 创建自定义动画的另一个方法。作用同上。</p>
<p>JQuery Traversing 方法说明</p>
<p>eq( index ) 从匹配的元素集合中取得一个指定位置的元素，index从0开始<br />
filter( expr ) 返回与指定表达式匹配的元素集合，可以使用”,”号分割多个expr，用于实现多个条件筛选<br />
filter( fn ) 利用一个特殊的函数来作为筛选条件移除集合中不匹配的元素。<br />
is( expr ) 用一个表达式来检查当前选择的元素集合，如果其中至少有一个元素符合这个给定的<br />
表达式就返回true。<br />
map( callback ) 将jQuery对象中的一组元素利用callback方法<strong>转换</strong>其值，然后添加到一个jQuery数组中。<br />
not( expr ) 从匹配的元素集合中删除与指定的表达式匹配的元素。<br />
slice( start, [end] ) 从匹配元素集合中取得一个子集，和内建的数组的slice方法相同。<br />
add( expr ) 把与表达式匹配的元素添加到jQuery对象中。<br />
children( [expr] ) 取得一个包含匹配的元素集合中每一个元素的所有子元素的元素集合。可选的过滤器<br />
将使这个方法只匹配符合的元素(只包括元素节点，不包括文本节点)。<br />
contents( ) 取得一个包含匹配的元素集合中每一个元素的所有子孙节点的集合(只包括元素节点，不<br />
包括文本节点)，如果元素为iframe，则取得其中的文档元素<br />
find( expr ) <strong>搜索</strong>所有与指定表达式匹配的元素。<br />
next( [expr] ) 取得一个包含匹配的元素集合中每一个元素紧邻的后面同辈元素的元素集合。<br />
nextAll( [expr] ) 取得一个包含匹配的元素集合中每一个元素所有的后面同辈元素的元素集合<br />
parent( [expr] ) 取得一个包含着所有匹配元素的唯一父元素的元素集合。<br />
parents( [expr] ) 取得一个包含着所有匹配元素的唯一祖先元素的元素集合（不包含根元素）。<br />
prev( [expr] ) 取得一个包含匹配的元素集合中每一个元素紧邻的前一个同辈元素的元素集合。<br />
prevAll( [expr] ) 取得一个包含匹配的元素集合中每一个元素的之前所有同辈元素的元素集合。<br />
siblings( [expr] ) 取得一个包含匹配的元素集合中每一个元素的所有同辈元素的元素集合。<br />
andSelf( ) 将前一个匹配的元素集合添加到当前的集合中<br />
取得所有div元素和其中的p元素，添加border类属性。取得所有div元素中的p元素，<br />
添加background类属性<br />
$(”div”).find(”p”).andSelf().addClass(”border”);<br />
$(”div”).find(”p”).addClass(”background”);<br />
end( ) 结束当前的操作，回到当前操作的前一个操作<br />
找到所有p元素其中的span元素集合，然后返回p元素集合，添加css属性<br />
$(”p”).find(”span”).end().css(”border”, “2px red solid”);</p>
<p>JQuery Selectors 方法说明</p>
<p>基本选择器<br />
$(”#myDiv”) 匹配唯一的具有此id值的元素<br />
$(”div”) 匹配指定名称的所有元素<br />
$(”.myClass”) 匹配具有此class样式值的所有元素<br />
$(”*”) 匹配所有元素<br />
$(”div,span,p.myClass”) 联合所有匹配的选择器<br />
层叠选择器<br />
$(”form input”) 后代选择器，选择ancestor的所有子孙节点<br />
$(”#main &gt; *”) 子选择器，选择parent的所有子节点<br />
$(”label + input”) 临选择器，选择prev的下一个临节点<br />
$(”#prev ~ div”) 同胞选择器，选择prev的所有同胞节点<br />
基本过滤选择器<br />
$(”tr:first”) 匹配第一个选择的元素<br />
$(”tr:last”) 匹配最后一个选择的元素<br />
$(”input:not(:checked) + span”)从原元素集合中过滤掉匹配selector的所有元素（这里有是一个临选择器）<br />
$(”tr:even”) 匹配集合中偶数位置的所有元素(从0开始)<br />
$(”tr:odd”) 匹配集合中奇数位置的所有元素(从0开始)<br />
$(”td:eq(2)”) 匹配集合中指定位置的元素(从0开始)<br />
$(”td:gt(4)”) 匹配集合中指定位置之后的所有元素(从0开始)<br />
$(”td:gl(4)”) 匹配集合中指定位置之前的所有元素(从0开始)<br />
$(”:header”) 匹配所有标题<br />
$(”div:animated”) 匹配所有正在运行动画的所有元素<br />
内容过滤选择器<br />
$(”div:contains(’John’)”) 匹配含有指定文本的所有元素<br />
$(”td:empty”) 匹配所有空元素(只含有文本的元素不算空元素)<br />
$(”div:has(p)”) 从原元素集合中再次匹配所有至少含有一个selector的所有元素<br />
$(”td:parent”) 匹配所有不为空的元素(含有文本的元素也算)<br />
$(”div:hidden”) 匹配所有隐藏的元素，也包括表单的隐藏域<br />
$(”div:visible”) 匹配所有可见的元素<br />
属性过滤选择器<br />
$(”div[id]”) 匹配所有具有指定属性的元素<br />
$(”input[name=’newsletter’]”) 匹配所有具有指定属性值的元素<br />
$(”input[name!=’newsletter’]”) 匹配所有不具有指定属性值的元素<br />
$(”input[name^=’news’]”) 匹配所有指定属性值以value开头的元素<br />
$(”input[name$=’letter’]”) 匹配所有指定属性值以value结尾的元素<br />
$(”input[name*=’man’]”) 匹配所有指定属性值含有value字符的元素<br />
$(”input[id][name$=’man’]”) 匹配同时符合多个选择器的所有元素<br />
子元素过滤选择器<br />
$(”ul li:nth-child(2)”),<br />
$(”ul li:nth-child(odd)”), 匹配父元素的第n个子元素<br />
$(”ul li:nth-child(3n + 1)”)</p>
<p>$(”div span:first-child”) 匹配父元素的第1个子元素<br />
$(”div span:last-child”) 匹配父元素的最后1个子元素<br />
$(”div button:only-child”) 匹配父元素的唯一1个子元素<br />
表单元素选择器<br />
$(”:input”) 匹配所有的表单输入元素，包括所有类型的input, textarea, select 和 button<br />
$(”:text”) 匹配所有类型为text的input元素<br />
$(”:password”) 匹配所有类型为password的input元素<br />
$(”:radio”) 匹配所有类型为radio的input元素<br />
$(”:checkbox”) 匹配所有类型为checkbox的input元素<br />
$(”:submit”) 匹配所有类型为submit的input元素<br />
$(”:image”) 匹配所有类型为image的input元素<br />
$(”:reset”) 匹配所有类型为reset的input元素<br />
$(”:button”) 匹配所有类型为button的input元素<br />
$(”:file”) 匹配所有类型为file的input元素<br />
$(”:hidden”) 匹配所有类型为hidden的input元素或表单的隐藏域<br />
表单元素过滤选择器<br />
$(”:enabled”) 匹配所有可操作的表单元素<br />
$(”:disabled”) 匹配所有不可操作的表单元素<br />
$(”:checked”) 匹配所有已点选的元素<br />
$(”select option:selected”) 匹配所有已选择的元素</p>
<p>JQuery CSS 方法说明</p>
<p>css( name ) 访问第一个匹配元素的样式属性。<br />
css( properties ) 把一个”名/值对”对象设置为所有匹配元素的样式属性。<br />
$(”p”).hover(function () {<br />
$(this).css({ backgroundColor:”yellow”, fontWeight:”bolder” });<br />
}, function () {<br />
var cssObj = {<br />
backgroundColor: “#ddd”,<br />
fontWeight: “”,<br />
color: “rgb(0,40,244)”<br />
}<br />
$(this).css(cssObj);<br />
});<br />
css( name, value ) 在所有匹配的元素中，设置一个样式属性的值。<br />
offset( ) 取得匹配的第一个元素相对于当前可视窗口的位置。返回的对象有2个属性，<br />
top和left，属性值为整数。这个函数只能用于可见元素。<br />
var p = $(”p:last”);<br />
var offset = p.offset();<br />
p.html( “left: ” + offset.left + “, top: ” + offset.top );<br />
width( ) 取得当前第一匹配的元素的宽度值，<br />
width( val ) 为每个匹配的元素设置指定的宽度值。<br />
height( ) 取得当前第一匹配的元素的高度值，<br />
height( val ) 为每个匹配的元素设置指定的高度值。</p>
<p>JQuery Utilities 方法说明<br />
jQuery.browser<br />
.msie 表示ie<br />
jQuery.browser.version 读取用户浏览器的版本信息<br />
jQuery.boxModel 检测用户浏览器针对当前页的显示是否基于<strong>w3c</strong> CSS的盒模型<br />
jQuery.isFunction( obj ) 检测传递的参数是否为function<br />
function stub() { }<br />
var objs = [<br />
function () {},<br />
{ x:15, y:20 },<br />
null,<br />
stub,<br />
“function”<br />
];<br />
jQuery.each(objs, function (i) {<br />
var isFunc = jQuery.isFunction(objs[i]);<br />
$(”span:eq( ” + i + “)”).text(isFunc);<br />
});<br />
jQuery.trim( str ) 清除字符串两端的空格，使用正则表达式来清除给定字符两端的空格<br />
jQuery.each( object, callback ) 一个通用的迭代器，可以用来无缝迭代对象和数组<br />
jQuery.extend( target, object1, [objectN] ) 扩展一个对象，修改原来的对象并返回，这是一个强大的实现继承的<br />
工具，这种继承是采用传值的方法来实现的，而不是JavaScript中的<br />
原型链方式。<br />
合并settings和options对象，返回修改后的settings对象<br />
var settings = { validate: false, limit: 5, name: “foo” };<br />
var options = { validate: true, name: “bar” };<br />
jQuery.extend(settings, options);</p>
<p>合并defaults和options对象，defaults对象并没有被修改。options对象中的值<br />
代替了defaults对象的值传递给了empty。</p>
<p>var empty = {}<br />
var defaults = { validate: false, limit: 5, name: “foo” };<br />
var options = { validate: true, name: “bar” };<br />
var settings = $.extend(empty, defaults, options);<br />
jQuery.grep( array, callback, [invert] ) 通过一个筛选函数来去除数组中的项<br />
$.grep( [0,1,2], function(n,i){<br />
return n &gt; 0;<br />
});<br />
jQuery.makeArray( obj ) 将一个类似数组的对象转化为一个真正的数组<br />
将选取的div元素集合转化为一个数组<br />
var arr = jQuery.makeArray(document.getElementsByTagName(”div”));<br />
arr.reverse(); // use an Array method on list of dom elements<br />
$(arr).appendTo(document.body);<br />
jQuery.map( array, callback ) 使用某个方法修改一个数组中的项，然后返回一个新的数组<br />
jQuery.inArray( value, array ) 返回value在数组中的位置，如果没有找到，则返回-1<br />
jQuery.unique( array ) 删除数组中的所有重复元素，返回整理后的数组</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yangfuhai.com/49.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>杨福海：从谈女朋友角度谈如何做好网站</title>
		<link>http://www.yangfuhai.com/31.html</link>
		<comments>http://www.yangfuhai.com/31.html#comments</comments>
		<pubDate>Fri, 29 Jul 2011 07:17:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SEO技术]]></category>
		<category><![CDATA[网站推广]]></category>
		<category><![CDATA[网络技术]]></category>
		<category><![CDATA[网站优化]]></category>
		<category><![CDATA[网络推广]]></category>

		<guid isPermaLink="false">http://www.yangfuhai.com/?p=31</guid>
		<description><![CDATA[<p>今天看见江礼坤江老师的《SEO就是和搜索引擎谈恋爱》的文章，觉得挺有意思的，大家有空也可以去看看。不过说到做网站，大家都会，注册个域名，买 个空间，上传个程序，网站就做好了。可是说做好网站呢，未必是每个人都能掌握了。今天，我们就从谈女朋友的角度来谈谈如何做好网站。我相信，如果你谈女朋 友谈得不错的话[......]</p><p class='read-more'><a href='http://www.yangfuhai.com/31.html'>继续阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>今天看见江礼坤江老师的《SEO就是和搜索引擎谈恋爱》的文章，觉得挺有意思的，大家有空也可以去看看。不过说到做网站，大家都会，注册个域名，买 个空间，上传个程序，网站就做好了。可是说做好网站呢，未必是每个人都能掌握了。今天，我们就从谈女朋友的角度来谈谈如何做好网站。我相信，如果你谈女朋 友谈得不错的话，做网站应该也不会差到哪里去了。那如何做呢?</p>
<p>第一步，从外表上吸引异性目光。</p>
<p>如果你有过约会的经历，都应该知道首先在外表好好打扮一些。一个喜欢对你有第一好感，肯定不是你的学识，而是你的形象和举止。第一印象很重要。 所以你一定要表现的与众不同，要有亲和力。这样她才能注意到你。当然了，收到对方的关注，那只是第一步。人家愿不愿意和你交往，那还得看后面。网站也是一 样，你的网站和别人的不同了吗?还是像新浪一样的“门户网站” 呢?你的网站有自己的特色了吗?还是很老土的大众化?你的网站能在第一印象中人让“她”继续和你交往下去了吗?大家不妨反思一下。第一步是否到位了。</p>
<p>第二步，表现得要有内涵和修养。</p>
<p>有恋爱经验的同志都知道，光靠外表上去吸引异性是不长久的。所以这个时候呢?一定要表现得有内涵和修养，要让“她”感觉跟你在一起很有意思，很 有幽默感，没有烦恼，轻松自在。所以我们的网站也不要摆出一副高高在上的面孔。如果“她”觉得跟你在一起很没有意思，那你的第一步和第二部都白费了。</p>
<p>第三步，要让对方有安全感。</p>
<p>很多的女性在找男朋友的时候，都是很重视这点的。现在虽然女性的地位升高了，但是家里的支柱还是我们男人。光靠外表和内涵交往那永远都只停留在 “男女朋友”这个阶段，而这个阶段大家都知道，不管做什么，淘腰包的永远都是我们男人。如果你想让“她”付出点什么，就必须取得“他”的信任，而唯一取得 “她”信任的途径就只要一条：让“她”感觉到你很安全。网站也是一样，如果要让我们的用户付出点什么，第一步你必须让他对你的网站有安全感。</p>
<p>第四步，要用心的关心体贴女朋友。</p>
<p>女人如花似水，很容易就会受到伤害，特别是她很信任你，而且为你付出了许多的时候。你一定要多多关心女朋友，学习遇到挫折了，几句安慰鼓励的 话。工作不顺心了，陪她聊聊天。很多时候可能无缘无故的生气或者无聊的时候，陪她看看电影，逗逗她开心。所以啊，我们的网站呢也要一样，多听听用户反馈意 见，多听听他们的心声。做好网站的各种服务。如果是电子商务网站，是不是送送点小礼物什么的也不为过。</p>
<p>如果这上面四点你都做好了，我想你的女朋友没有什么理由离开你了吧。不过啊，做网站可以从谈女朋友的角度去学习，谈女朋友可别从网站的角度去学习哦，如果你让每个善良的女孩都爱上你了，那可就真的完了。</p>
<p>转载请注明作者<a href="http://www.yangfuhai.com"target="_blank"title="杨福海" >杨福海</a>和出处杨福海的博客http://www.yangfuhai.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yangfuhai.com/31.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>杨福海：如何监测Email营销的营销效果</title>
		<link>http://www.yangfuhai.com/29.html</link>
		<comments>http://www.yangfuhai.com/29.html#comments</comments>
		<pubDate>Fri, 29 Jul 2011 07:15:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[网站推广]]></category>
		<category><![CDATA[网络营销]]></category>
		<category><![CDATA[email营销]]></category>
		<category><![CDATA[mail营销]]></category>
		<category><![CDATA[邮件营销]]></category>

		<guid isPermaLink="false">http://www.yangfuhai.com/?p=29</guid>
		<description><![CDATA[<p>我觉得，不仅仅只是电子邮件营销，其他所有的营销方式都应该有其测量营销效果的方法，这样我们才能去除一些无效的，赔本的营销活动，才能是我们的盈利最大化。但是电子邮件营销的测量方法和其他营销的不太相同，需要一些技巧才能完成的。所以昨天写完《如何进行电子邮件营销与推广》，我觉得应该再写写这一篇文章。</p>
<p>首先，[......]</p><p class='read-more'><a href='http://www.yangfuhai.com/29.html'>继续阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>我觉得，不仅仅只是电子邮件营销，其他所有的营销方式都应该有其测量营销效果的方法，这样我们才能去除一些无效的，赔本的营销活动，才能是我们的盈利最大化。但是电子邮件营销的测量方法和其他营销的不太相同，需要一些技巧才能完成的。所以昨天写完《如何进行电子邮件营销与推广》，我觉得应该再写写这一篇文章。</p>
<p>首先，我们来看看邮件送达率。</p>
<p>邮件送达总数是邮件的发送总数减去我们自己的邮件接收到的退还邮件的数目。再用邮件送达总数除以我们发送邮件的数量就是邮件送达率了。邮件送达率反映了我们发送到达目的用户的Email的比例。但是是否进入用户的垃圾箱，用户是否阅读了我们发送的这封邮件不得而知了。</p>
<p>接下来我们来看看邮件阅读率。</p>
<p>邮件阅读率，邮件阅读率就是用户打开了这封邮件的用户数量和我们发送成功的Email的比率。但是，我们如何才能知道用户是否打开了这封邮件 呢?大家都知道，现在Email是支持html的，这样，我们就可以在邮件里面切入一张小图片，只要我们监控了这张小图片的访问数量，我们就可以得出的邮 件阅读率了。当然，这里面可能有一个用户多次打开Email的情况，但是由于这种情况较少，我们可以忽略了。但是情况情况又出来了，用户是否真的阅读了我 们的邮件了呢?也许用户打开一秒钟又关了，这和用户没有阅读没什么两样了。不过到目前为止，我还真的不知道如何去监控用户阅读时间的长度。如果有这方面经 验的，希望多多指教。</p>
<p>知道了邮件的送达率，阅读率，这还是不够的，更重要的是邮件里面的链接点击率，或者说是邮件里特有链接网址的访问率。</p>
<p>我们每发一封邮件，我们都或多或少的在邮件里面添加我们的网址的链接，只有这样才能引导用户通过链接到我们的网站上来。不过加入链接也是讲技巧 的，真确的方法就是在每个链接都应该添加我们的发送Email的编号ID，只有这样我们才知道这个链接是哪次(或者哪天)发送的Email应道过来的用 户。比如，今天发送的Email我们可以写成以下这种格式：http://www.xxxx.com/email.php?gotoProductId=1&amp;mailDate=20100620 ，其中gotoProductId后面的值就我们要引导到的产品编号为1的页面,后面的mailDate的值就相当于今天的日期了。然后通过程序 email.php去接受gotpProductId和mailDate的值，我们就知道是哪天发送的Email了。如果你想更精确的知道每封Email 用户通过哪个地方来的链接来得比较多，比如我想知道用户是从邮件顶部的链接来的多还是邮件中间部分的链接还是底部的链接，这样我们可以给链接地址再加个参 数如：顶部链接写成：http://www.xxxx.com/email.php?gotoProductId=1&amp;mailDate=20100620&amp;position=top ,中间的部分链接我们写成http://www.xxxx.com/email.php?gotoProductId=1&amp;mailDate=20100620&amp;position=center，底部的链接我们写成http://www.xxxx.com/email.php?gotoProductId=1&amp;mailDate=20100620&amp;position=botton 等。有了这些参数了以后，我们就知道了用户是从哪些Email的哪些链接来的比较多了。</p>
<p>有了上面的邮件送达率，阅读率，点击率。我们就可以知道 用户比较喜欢阅读什么样的邮件?喜欢点击哪个位置的链接?是上部?中部?还是底部?喜欢什么样的内容?哪些内容的链接更容易引导用户?哪些措施是更有效的 推广方式 等统计内容了。如果这些你都知道了，我想邮件推广对你来说应该不再是难事了。</p>
<p>&nbsp;</p>
<p>转载请注明文章来至：<a href="http://www.yangfuhai.com"target="_blank"title="杨福海" >杨福海</a>博客www.yangfuhai.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yangfuhai.com/29.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>杨福海：如何进行电子邮件营销与推广</title>
		<link>http://www.yangfuhai.com/27.html</link>
		<comments>http://www.yangfuhai.com/27.html#comments</comments>
		<pubDate>Fri, 29 Jul 2011 07:14:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SEO技术]]></category>
		<category><![CDATA[网站推广]]></category>
		<category><![CDATA[网络营销]]></category>
		<category><![CDATA[邮件监测]]></category>
		<category><![CDATA[邮件营销]]></category>

		<guid isPermaLink="false">http://www.yangfuhai.com/?p=27</guid>
		<description><![CDATA[<p>其实，电子邮件营销现在网上已经有了很多的相关文章了，前几天还看见卢松松写了一篇，但是尽管如此，但是都只是蜻蜓点水，没有深入。至少我是这么感觉的，所以今天我觉得我们有必要再谈谈电子邮件营销。</p>
<p>首先，我们来看看电子邮件营销的好处与优势。优势一，成本低。从收集电子邮件的角度讲，收集电子邮件是非常简单的，复[......]</p><p class='read-more'><a href='http://www.yangfuhai.com/27.html'>继续阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>其实，电子邮件营销现在网上已经有了很多的相关文章了，前几天还看见卢松松写了一篇，但是尽管如此，但是都只是蜻蜓点水，没有深入。至少我是这么感觉的，所以今天我觉得我们有必要再谈谈电子邮件营销。</p>
<p>首先，我们来看看电子邮件营销的好处与优势。优势一，成本低。从收集电子邮件的角度讲，收集电子邮件是非常简单的，复制粘贴即可，下面我会跟大 家讲如何收集电子邮件。从技术角度讲，只要会上网的每个人都会发送电子邮件，无需技术人员，这个我就不用讲了。优势二，邮件只要投放精准，客户转化率是非 常高的，远比其他营销方式要高出很多，据统计，85%以上的网上零售商认为电子邮件营销最有效的，其次才到搜索引擎营销，再次才到联署营销。其他方式的营 销更不用说了。所以，这种成本低，转化高的电子邮件营销方式成为目前全时间最流行的营销方式。</p>
<p>现在我们切入正题，正式来看看如何进行电子邮件营销。电子邮件营销分为许可式电子邮件营销和非许可试电子邮件营销，非许可试电子邮件营销就是大 家常常说的垃圾邮件。很多的专家和学者都是不赞成非许可试电子邮件营销的，里面涉及到了口碑营销等很多内容，以后我会给大家讲口碑营销的时候分析原因。我 个人也是偏向于许可试电子邮件营销。但是在实际的推广中，特别是一些新的网站，不得不用非许可试电子邮件营销，很多的时候也是迫于无奈。下面，我给分别给 大家讲讲非许可试的电子邮件营销和许可试电子邮件营销。对非许可试电子邮件营销的朋友有偏见的朋友之间跳过看许可试营销就行了，有问题非常欢迎大家和我一 起讨论。</p>
<p>首先我们来谈谈非许可试电子邮件营销，其实不管什么样的电子邮件营销，无非就是收集Email，写内容，发送Email的过程。只是在执行的过程中方式不同而已。我们先来看看非许可试电子邮件的Email收集。</p>
<p>非许可试电子邮件营销的Email收集有以下四种方法。</p>
<p>第一种方法，通过搜索引擎搜索，现在有很多的软件可以通过搜索某个关键字，然后收集到很多的电子邮件到处到txt文件，大家可以百度一下这样的软件。</p>
<p>第二种方法，通过制定的网站收集，假设我们的网站是卖衣服的，你可以先收集一些大型的衣服相关的论坛和b2c这样的网站。然后通过这些网站收集 Email。当然了,这种方式收集的方法又有两种，第一种就是通过手工收集，这种方式收集Email质量高，质量高的Email转化率就高，但是速度慢。 第二种是软件收集，当我们浏览某个网站的时候，这个软件就会把这个网页的所有Email都收集过来。软件原理非常简单，通过请求的url返回的内容，然后 通过正则表达式去匹配就行了。如果大家需要，我有时间会给大家写一个。</p>
<p>第三种方法，也就是卢松松在他的博客也提到过的通过收集垃圾邮件里的邮件地址获得，我们在很多的时候都会收到垃圾邮件，这些邮件里面会往往都是发送给很多人的，我们就可以通过这些获得Email地址。</p>
<p>第四种方法，就是直接购买了，现在网上有很多的电子邮件数据库。我们可以去联系这些商家购买。当然，这种方法是最直接的，精准率也是最差的。</p>
<p>好了，通过以上这几种方法，我们获得了Email地址了。接下来我们就要开始写内容了。可能很多朋友会问，这个就直接写我推广的内容就行了呗， 还有什么要说的。如果你也是这么想，那就大错特错了，就算你有了Email邮件，同时这些邮件也发送到了对方的Email里去了，但是别人没有打开，那有 什么用呢?别人看见是广告邮件，直接删除就完事了，所以，这里面也有很多技巧的。</p>
<p>据相关权威资料统计，打开阅读邮件的有以下几种情况，认识或者是信任的发件人，这种占75%，以前打开过你的Email，觉得你的Email是 有价值的，这种情况占50%，你的邮件标题吸引了读者，这种情况占30%，打折信息在20%，促销信息占15%(这个比例还在下降)。从这个统计，我们不 难看出，信任发件人这种情况打开Email的比例是最高的。所以我们在写邮件标题的时候要注意让阅读者信任你。我总结了一下，以下几种标题打开率是最高 的，我只抛砖引玉，希望大家能总结出更多更好的标题来。第一，邀请类标题。第二，节日祝福类标题，其他还有新闻公告，电子杂志等。特别提醒大家要杜绝一下 几种标题，第一促销，现在大家看多看烦了，看见此类Email直接删除了事。第二优惠券。我以站长网的身份做个小例子。比如现在父亲节到了，要发送到我的 Email：yangfuhai(at)yangfuhai.com(我吧@换成(at)目的是为了防止搜索引擎搜索到我的Email给我发垃圾邮件),标题 我们可以这么写。yangfuhai,站长网祝您父亲节快乐!如果可以的，你还可以在标题里加入一些 阅读邮件能给阅读者带来什么好处，但是不要太高调了，要平淡一些。</p>
<p>标题写好了，我们就可以开始来写邮件内容了，内容我建议大家用一些html设计，这样可以让阅读者有更多的亲切感，同时更有权威性(至少感觉就 这样)。可以在里面加入一些图片，但是不能太多了，2-3张就够了，最好有logo，图片太多了打开会很慢，如果出现图片无法显示的情况那这封Email 就大打折扣了。同时html设计好的这封Email不宜超过500像素，如果太宽了，部分内容阅读者就看不到了。</p>
<p>内容写好了以后，我们就可以发送Email邮件了。如果是非许可试电子邮件营销，建议多用几个账号，163的注册几个，263注册几 个，gmail注册几个,yahoo注册几个，foxmail注册几个,21cn注册几个，qq邮箱注册几个，sina和suho都注册几个，这样差不多 就够你用了，不够的话再注册，反正都是免费的。</p>
<p>接下来，我们开始讲许可试电子邮件营销了。许可试要比非许可试要难的很多，技巧要多得很多，因为许可试是用户允许你发Email了，你才能发。</p>
<p>和非许可试电子邮件营销一样，第一步，我们还是一样的收集Email。收集Email的方法就只能通过我们自己的网站去收集了。这样一般就需要 我们的网站有注册功能，用户才能填写用户Email等信息。所以在注册的时候，我们必须给用户一个注册的理由。比如，通过注册我们的网站，你能够收到最新 的产品信息，优惠信息和促销信息等。我们来看看美国佬们的网站上是怎么写的</p>
<blockquote><p>　　“Subscribe now to Web Marketing Today, the Internet&#8217;s most popular Internet marketing e-mail newsletter and join over 100,000 subscribers.</p>
<p>I&#8217;m including three free e-books that you can download and read: The Web Marketing Checklist: 31 Ways to Promote Your Website, 12 Website Design Decisions Your Business Will Need to Make, and Making &amp; Marketing E-Books, each worth $12 &#8212; just for subscribing. No catch. We respect your privacy and never sell or rent our subscriber lists. Subscribing will not result in more spam! I guarantee it!”</p></blockquote>
<p>大概意思就是注册了他们的免费电子杂志，他们将免费提供三本价值12美元的电子书给你，同时保证不公开你的Email。他们给你提供了有价值的 东西，这就是理由。网址是http://www.wilsonweb.com/ 大家可以去看下。而已要注意的技巧是假设我们像老美国一样真的提供了三本价值12美元的电子书。我们应该也要分批发送，而不是一次发送到了用户的手中。</p>
<p>当我们的网站有了一定的用户量了以后，我们就可以发送Email了，关于如何吸引读者阅读你的Email 可以参照上面讲的方法。需要注意的时候，可能很多时候，我们发送Email到却用户的垃圾邮箱里去了，所以很多时候，标题我们可以在改改，比如某朋友觉得 我写的文章还可以，他阅定了我的文章，标题我们可以直接这么写：“<a href="http://www.yangfuhai.com"target="_blank"title="杨福海" >杨福海</a>：如何进行电子邮件营销与推广”，这样，尽管到了他的垃圾邮箱里了，他一看见，一 样会阅读我的邮件。而且，我们在写内容的时候要注意格式，在邮件抬头部分我们应该这么写“这不是垃圾邮件，您收到这封邮件的原因是因为您在XXXX年XX 月XX日注册了我们的网站杨福海的博客(或者是阅定了我们的邮件)，如果您不想再继续收到这封Email，您可以点击这里退订。” 其中“点击这里退订”这几个字是退订邮件的链接。给用户一个选择权，否则这封邮件和垃圾邮件就没有什么区别了。</p>
<p>如果您觉得这封邮件只能从口碑，只能拉住用户，还不能发展新用户的话，我们可以这样修改一下，标题还是一样“杨福海：如何进行电子邮件营销与推 广”，邮件抬头写成“这是一封关于<a href="http://www.yangfuhai.com"target="_blank"title="网络营销" >网络营销</a>的邮件，您收到这封邮件的原因是因为您在XXXX年XX月XX日注册了我们的网站杨福海的博客(或者是阅定了我 们的邮件)或者是您的朋友转发给您了，如果您不想再继续收到这封Email，您可以登录我们的网站退订。” 同时在邮件底部写到“如果您觉得这封邮件有用，请转发给您需要的朋友，我们万分感谢。但是，只能转发给您的朋友，以免被当做垃圾邮件。”这样我们就可以把 Email营销，口碑营销，病毒营销巧妙的集合在一起了。</p>
<p>最后，提醒大家。当大家在发送邮件给用户之前，先给自己发一封，自己认真阅读了以后再发送给用户。这样才能避免一些粗心的错误。当然，只通过这 些方法还是远远不够的，在邮件邮箱里面还有很多东西需要我们去深入和了解。比如后续电子邮件营销，电子邮件注册转化率评测，退订率评测，退订原因分析，邮 件送达率，邮件打开阅读率，邮件阅读平均时间，邮件链接点击率 等等等等东西需要深入和了解。由于我是刚写博客，写得很粗糙。有什么不对的地方希望大家多多提出来，一起进步，在今后的博文生涯中，我将会给大家分享更多 的营销与推广知识。</p>
<p>&nbsp;</p>
<p>转载请注明文章来至：杨福海博客www.yangfuhai.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yangfuhai.com/27.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

