列表中最后一个元素样式清除修改方法(jQuery)

我们在做动态网站的时候,当遇到导航条的栏目列表或某区域内文章列表等含有大量重复内容区域时,通常会用循环将他们输出,而他们节点的样式都是相同的,比如下边距,外边框的分隔样式,通过循环输出的结果就是最后一个节点依然保留着所有的样式我们是不希望他有下边距或者外边框.

例如: 导航上每个栏目标题(li)右侧可能会用竖线分隔每个栏目标题,于是最后一个栏目右侧也出现了不想要的竖线,但是这些同级的li都是循环出来的 ,我们无法单独给最后一个元素添加特殊的样式,本来有个很简单的方法,那就是使用CSS3的:first和:last选择器,但是当IE6和IE7不支持:first和:last选择器的,有个简单的方法,通过Js(本文用的jQuery)去除或修改列表或循环内容的第一个和最后一个节点的样式,可以兼容所有浏览器,是比较方便的,其实用js可以轻松实现,但是我后来发现,jQuery来处理或许更加轻松些,也是正好我最近在学习jQuery,的确很好用.在body内最后加上一小段就可以了,比如下面这个简单的例子:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>LastChildStyleRemove</title>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<style>
#mainContent {background-color:#eee;}
#mainContent ul.nav {list-style:none;font-size:12px;}
#mainContent ul.nav li {float:left;padding:5px 15px;border-left:1px solid #fff;border-right:1px solid #ddd;}
#mainContent ul.nav li a {color:#666;text-decoration:none;}
</style>
</head>
<body>
	<div id="mainContent">
		<ul class="nav">
			<li><a href="#">导航一</a></li>
			<li><a href="#">导航二</a></li>
			<li><a href="#">导航三</a></li>
			<li><a href="#">导航四</a></li>
		</ul>
		<div style="clear:both;"></div>
	</div>
</body>
<script>
	$("#mainContent ul.nav li:first-child").css("border-left", "none")
	$("#mainContent ul.nav li:last-child").css("border-right", "none")
</script>
</html>

这个例子除了用到最后一个元素样式清除,也用了首个元素样式清除,这个很好理解,这是两个方法,其实只用到一个函数css( propertyName , value  ),而关于元素选择器可以查看jQuery的例子::first-child Selector:last-child Selector.上面的例子也很简单清晰易懂…

当然我也在网上看到有这样的javascript写法,不过相对较为复杂,内容如下:

<script language="javascript" type="text/javascript">
  function addClassName(tag,classname){
   if(!tag.className){
    tag.className=classname;
   }else{
    tag.className+=" "+classname;
   }
  }

  function addFirstChild(){
   var olitems=document.getElementsByTagName("ol");
   var ulitems=document.getElementsByTagName("ul");

   for(var i=0;i<olitems.length;i++){
    addClassName(olitems[i].getElementsByTagName("li")["0"],"first-child");
   }
   for(var i=0;i<ulitems.length;i++){
    addClassName(ulitems[i].getElementsByTagName("li")["0"],"first-child");
   }
  }
  function addLastChild(){
   var olitems=document.getElementsByTagName("ol");
   var ulitems=document.getElementsByTagName("ul");

   for(var i=0;i<olitems.length;i++){
    addClassName(olitems[i].getElementsByTagName("li")[olitems[i].children.length-1],"last-child");
   }
   for(var i=0;i<ulitems.length;i++){
    addClassName(ulitems[i].getElementsByTagName("li")[ulitems[i].children.length-1],"last-child");
   }
  }

  if(document.all && !window.opera){
   window.onload=addFirstChild;
   window.onload=addLastChild;
  }
 </script>

如果有兴趣可以尝试,至此,大家也发现实际上用jQuery并不困难,用好就有讲究了,不过最好还是打好js的基础,下次我将介绍另外一个简单的效果,关于用jQuery控制下拉菜单悬浮,我用了一个很笨的嵌套方法,有空我在写一下.今天就写到这里希望大家能有所收获.


PS: 其实这个例子就是简单介绍了jQuery的两个用法,如果动态脚本支持判断首尾元素的话,其实直接在HTML内写个判断(例如:phpcms文章列表循环不同样式制作方法),给首尾元素加个class=”first-tag”和class=”last-tag”之类的样式也是不错的选择,实际上现在已经不推荐这样的写法,因为你会发现有很多冗余的小代码,维护十分不方便,这里也就是举一反三,大家视情况来写吧( update: 2014年5月17日 )

PHPCMS无法搜索文章内容中的关键字解决

最近工作上维护公司的网站,其后台用的是PHPCMS V9,以前曾用过PHPCMS2008,用这个还算能够快速上手.不过使用过程中也有很多问题,比如这个最近网站遇到的搜索功能的问题,经常搜不到文章,除非是标题或者关键字有相同的,而文章内容部分是搜索不到的,编辑需要找相关文章来进行SEO优化也不是很方便,于是我便研究了一下PHPCMS自带的搜索功能,首先要说的是后台可以对搜索进行设置和调整的区域主要包括

  1. 模块 > 模块管理 > 全站搜索 > 模块管理 > 全站搜索
  2. 内容 > 内容相关设置 > 模型管理 > 文章模型字段管理

第一个很简单,直接查看模块配置,如果没有选中全站搜索的果断选中,这样可以避免一些搜索不到信息的情况,后面两个我也选中是了,至于选不选,看个人需要了.提交之后建议重建索引,这里需要提到的是,有时候重建索引出错,出错内容大致是这样的

MySQL Query : DELETE FROM 'phpcmsv9'.'v9_search' WHERE 'siteid' = '1'
MySQL Error : Incorrect key file for table '.\phpcmsv9\v9_search.MYI'; try to repair it
MySQL Errno : 126
Message : Incorrect key file for table '.\phpcmsv9\v9_search.MYI'; try to repair it
Need Help?

这个解决办法也十分简单,同样在后台找到 扩展 > 扩展 > 数据库工具 > 请选择数据链接池处选择数据库后,会展现出该数据库的结构,找到v9_searchv9_search_keyword表,后面有修复,点击修复,然后重新回到重建索引处,就不会出错了.

另一方面如果有些关键字是你需要在搜索结果中显示的,比如作者,内容等等,先说如何搜索到作者吧,找到 内容 > 内容相关设置 > 模型管理 > 进入文章模型字段管理,找到作者字段,点击修改,在下面单选选项处可以看到作为搜索条件,此选项,选择即可.

同样的,内容字段也是这个方法,不过有个问题,内容字段的作为搜索条件处是灰色不可更改,这要怎么办是好?这种情况下,如有需要,那就要强行修改数据库内的值了,以内容字段为例,打开数据库,这里我用的phpmyadmin,找到相应数据库的表v9_model_field,找到其中name内容(fieldcontent)的地方,点击编辑,其中有个字段叫做issearch,当前值为0,于是我们将它修改为1即可.再次返回后台,会发现作为搜索条件已经是了.

此时,你可以尝试搜索一些关键字,会发现问题得到解决,如果你还有什么问题,可以发电子邮件给我,我会抽时间与你一起讨论.

好了暂时写到这里,谢谢大家的关注.如果想了解sphinx全文索引可以看一个PHPCMS官方论坛的帖子,写的不错,点击进入phpcms中应用sphinx全文索引

WP联系人同步技巧

Windows Phone从2010年年底发布到现在快一年半了,至于他的好坏褒贬不一,因为大陆没有行货,甚至是水货都难以购买到,使它在国内普及率相当的低,不过从配置上和流畅性来讲,作为全球领先IT公司微软开发的系统,整体感觉还是比较不错的,随着时间推移,metro UI开始广泛应用到各方面设计,WP系统逐步走近我们的生活.下面进入正题(以下内容将不包括iOS,因为我没有深入使用过该系统,不是很了解,也没有iPhone.所以讲对塞班,安卓进行简单对比.).

先来说说WP跟android在联系人管理方面的不同处,如果你是谷粉,喜欢谷歌的各种应用,并购买了android系统的手机,少不了在联网后第一时间或是买来第一次进行简单的手机配置时登录自己的谷歌账号,这样的好处就是可以同步GMAIL上的联系人,谷歌地图,谷歌纵横,日历,甚至是picasa等等.从这个时代起,同步在手机上起到了很大的作用,也带来的很大的方便,当然windows phone也不例外,经过数日的研究琢磨,我就讲一下windows phone 手机的同步技巧.

由于我前几天把WIN7删了,装的WIN8,而XP又不能使用ZUNE(貌似现在ZUNE 4.8可以,不过官方也有说明至少Xp SP3系统以上),虽然有相关解决方案,但是不想把这个系统弄坏了,也没没有装上各种组件,因此也不能手机屏幕截图了.大致说明一下吧,windows phone的联系人同步可以直接通过hotmail邮箱(MSN账号)或者是早期注册的live账号同步,如果经常用MSN的话,同步MSN联系人是不错的选择,能够同步清晰的联系人头像,非常方便,当然,如果你没有MSN的话,这个就有点麻烦了,首先联系人头像无法通过在线编辑来自定义,也就是说只能用手机上编辑联系人功能来设置联系人的头像,虽然再次与服务器同步的时候,手机上的头像无法上传至服务器,并且下次服务器上该联系人信息有修改,但是同步后的联系人头像依然存在,不过,对于没有使用过MSN的用户来说,给所有联系人设置头像可能是一间很麻烦的事情,因此,这点及其不方便,也许某一天你换了一个wp的设备或者重置了手机,需要重新同步联系人,而这些头像或许就不存在了.

WP桌面
WP桌面没有联系人头像时人脉效果

有人会说,用QQ同步助手不就可以了,不过这里我要说的是,实际上在WP7下,通过QQ同步助手同步联系人是无法像其他系统(例如塞班,安卓)直接下载服务器端联系人资料数据,不过程序也有说明,直接在WP7的人脉,设置选项中,找到添加账户,高级设置,输入QQ邮箱地址密码下一步填写腾讯提供的EXCHANGE ACTIVESYNC数据,我记得qq.com,服务器ex.qq.com,填好之后,登录即可随时保持同步.其实理论上这个是比较方便的,但是用QQ联系人同步用户头像也存在问题,有一次我在电脑上在http://pim.qq.com上编辑好了大部分用户头像,保存后,发现无法同步到手机上后,初步断定可能是图片文件太大,无法正常同步到手机上,于是决定不再使用QQ联系人同步了.

最后我还是决定使用谷歌账户进行同步,跟上面方法相同,添加账户,进行同步,这一次头像也有了,联系人什么的一切都十分正常,用别人手机打个电话试试,呃,发现这是多么大的一个模糊的人头–!其实我正想说的就是谷歌服务器上的联系人头像太小了,想想800*480的分辨率屏幕放大将近3-4倍,不过在瓷砖效果上显示还是不错的…

因此对于三个不同的同步联系人的服务器进行比较得出结论:原生的其实本应该是最好的,但是不适合大部分中国人,至少在我这个圈子里很少有人通过MSN方式保存同事,朋友的电话,而且手机联系人属性和微软服务器保持一致.除非你经常用MSN和人联络,否则不推荐使用.而腾讯的和谷歌的这个就看你个人爱好了,我想真正用谷歌的人可能也不多,不过不经常使用同步功能的用户,就自己一个个联系人慢慢编辑头像吧,其他方面这两者基本相同.纯属个人喜好来进行选择了.

再就是WP7系统联系人的手机标签只能存在一个,这点让人很无语,对于有些联系人存在两部或更多手机的话,你若是要添加几个联系方式,恐怕就只能一个手机一个住宅号码了,为什么说这样不方便,因为明明两个都是手机号码,你却只能跟有手机标签的号码发短信,而选择住宅号码发短信就很麻烦,需要另外选择,这点做的很不人性化.希望在以后的系统版本中进行改动.过几天Tango即将问世,不知道能不能有什么新的变化,让我们期待吧.

当然最后有人会说,联系人同步不就是个头像,为什么这么在意,我是因为tiles动态效果很有意思,如果只是亮度不同的颜色变化实在无趣,所以我希望能有更多的联系人头像.好了,今天关于WP7人脉就说这么多了.这几天咳嗽严重,也不知道气候变化导致还是咋回事,悲剧的唉…

android手机性能优化

话说,自从我的手机变成了悲剧版本之后,用着相当的不习惯,什么程序无响应那是经常的,更糟糕的是发热导致触摸屏(电容屏)无法工作的问题,让人实在受不了.话说电容屏因为发热而无法正常使用的问题我已经找到勉强的解决方案了,那就是按挂断键关闭屏幕,稍等片刻(快则5s,慢则1分钟以上)按menu键,就发现触摸屏可用了,如果有时候一次不行反复挂断-menu的按,基本上能解决…

当然今天要说的不是电容屏问题,是内存小了怎么办,前几天写了一篇关于G2小内存的手机增加14M内存,以及官方固件系统升级等相关优化的文章<<G2 MAGIC 归来!>>,点击查看.但是这几天用着感觉还是十分的不爽,于是我又找了大量的信息,想了许多方法,在这里与大家分享,当然此方法理论上适用于所有版本的android系统手机,因为我主要是对程序优化.具体优化方案罗列如下:

删除不必要使用的系统软件,比如gtalk,youtube,market,gmail,email等等(部分系统程序需要钛备份将其卸载),当然前提你要知道你到底用不用他.

尽量少安装一些后台会运行的程序,那些会在后台自动运行,时不时观察下进程就可以了,如果发现有后台运行的程序,关闭后又自动开启,就可以采取以下措施:
1.你的确不需要使用,那么删除即可. 
2.如果非要使用却不经常使用,比如谷歌地图,可以使用钛备份的软件功能,将程序冻结,那么它将不会在后台运行,到想用的时候解冻即可.
3. 如果经常使用,那就只好忍受他占用你的内存了–!

关闭系统自启动项目和在某些事件触发情况下自动开启的程序,利用软件autostarts关闭开机启动项,开机后自动启动项,联网后自动启动项等等,包括很多系统程序都可以禁止掉.

完成以上优化,以后在启动系统后,可以使用释放内存工具,对部分系统进程关闭,效果也很明显.

小提示:系统最好不要用动态桌面,后台程序尽量关闭,输入法的话,好用就行不必追求过新的,比如前几天我更新了新版的百度输入法,让我蛋疼了几天,受不了卸载了,没有安装回之前的版本,需求更好的输入法了,不过难啊…也不知道为什么谷歌输入法和QQ输入法都不能同步用户词库.

上面提到的内容需要用到一些工具包括钛备份,高级任务管理器,autostarts,释放内存,而部分软件是需要root才可以正常使用,关于软件这里大家可以用手机在电子市场或其他市场自行搜索,或者在各大论坛下载,关于获取权限的文章大家也可在搜索.对于内存经常不足的用户,希望能起到起帮助或者启发.

PS:对于内存相当多的人可以无视此文章.本人优化后基本多了15M-25M内存,如果我说释放的内存为原来空闲的一倍也许好听些,而且一般来说不会造成系统不稳定等等.就写这么多了.有什么问题可以留言.

WordPress 3.2 发布及更新方法

就在几天前,wordpress 3.2正式版发布,这次更新可以说是想打巨大了,我也忍不住更新了,当然一直不能在线更新的朋友稍后可以看一下我介绍的方法.

首先简单介绍下新版的变化,最容易发现的是后台界面的变化,简洁清爽,其中细微的功能有待发烧友仔细研究下.比如这次新增加的主题Twenty Eleven,功能是十分强大的,另外听说这个版本有解决了400多个的问题,更新了控制面板的Footer部分,并增加了Freedoms和Credits,而且总体感觉运行速度稍有提高,当然除了好的方面,也有一些可能让默写懒人们感到不幸的消息,WordPress 3.2 不再支持PHP4 和MySQL4 主机环境不再支持 IE6 或更低版本的IE浏览器不再支持 IE6 或更低版本的IE浏览器,所以懒人们请及时更新了.(当然对于我表示压力不大.做了两年的网页设计师,最看不爽IE6了–!)

接下来简单说明下,我是如何更新到此版本的.因为在线更新好像从很早就不能用了.wordpress在线更新具体解决办法一只都总是拼人品,也很麻烦,这次我更新是通过本地更新上传,也十分简单方便.

  1. 首先你本地需要有wordpress的建站环境,我用的是xampp,接着在官方网站下载好wordpress 3.2中文版,并安装,这几步就不用我多说了吧,本地数据库建立需要和服务器上的相同,
  2. 接着,因为本地数据库是没有数据,这里需要将服务器上数据库导出,phpmyadmin直接导出整个数据库,再导入到本地,这时,会发现本地可以直接访问了,日志什么的都有了.
  3. 但是可能没有图片还有插件都没用了,所以需要将服务器上的文件直接复制到本地,包括wp-content\uploadswp-content\plugins,还有wp-content\themes\你的主题文件夹,
  4. 最后还需要注意的是你无法可能将登录本地后台,现象为登陆后直接进入到服务器的wordpress后台了.如果是这样需要在在修改本地的后台设置,但是后台进不去了怎么办呢,只有进入本地的phpmyadmin,找到wp_options修改修改(除非你改了),id为2的siteurl看到option_value可能是你的域名地址,这里需要改成http://localhost/目录名称(比如我的是http://localhost/whidy.net)这样你就可以进后台了,事实上,接着进入后台检查你的插件,和相关修改的代码,确认无误之后讲文件上传至服务器,这样基本上可以说,更新完成了,当然还要注意的是你的其他文件也要复制到服务器上,比如放在根目录的.htaccess,还有一些验证邮箱等需要用到的文件.

至此,就可以算大功告成了.好了,写了这么多,可能有点乱,不过希望对大家有所帮助…如果有什么问题可以留言,我会及时回复的.