当前位置:

首页 > 前端交互

增强用户体验之文章内的链接

我们在写文章的时候,难免会少不了添加一些链接。这些链接有的是指向自己的BLOG内的,有的是指向好友的BLOG,或一篇文章。指向自己BLOG的称为内部链接,指向外部的称为外部链接,我们习惯是外部链接在新窗口中打开,而内部链接在本身的页面打开。但WordPress默认所有的链接都是在自身页打开的。那要怎么才能把外部的链接强行在新窗口中打开呢?今天给大家说下怎样实现给文章的外部链接添加一个标识,并且在符合W3C标准的前提下在新窗口中打开。

而内部链接在本身页面打开。

我们知道,链接A的属性里有一个target=”_blank”。我们可以通过给链接添加这个属性来让链接在新窗口中打开。但这样为每个链接添加一个这样的属性并不是件轻松的事。而且还有个弊端:给A标签里面加target=”_blank”针对W3C标准是不合法的。那该如何解决呢?别急!跟着我来一步一步解决问题。

第一步:我们先要让文章里的链接全部在新窗口中打开:

jQuery(.entry a).click(function(){window.open(this.href);return false;});

第二步:给文章里的链接添加一个标识符
这个我们可以直接在CSS里定义

entry a {background:(images/out-links.gif) right top no-repeat; padding-right: 12px;}

现在文章里所有的链接都在新窗口中打开了,并且还带了一个标识的图标。但这并不是我们想要的,因为我们只想把标识符给外部链接并且内部链接是在自身窗口中打开的。继续下一步;

第三步:去掉内部链接的标识符

做这一步前我们首先要做的是区分文章里的链接是内部链接还是外部链接。这个可以用jQuery的选择器来区分,以我的BLOG为例:内部链接的href里肯定会包含我的域名(http://leotheme.cn)里的leotheme这个字符串。知道了这个我们就可以写代码了:

jQuery("a[href*='leotheme']").css({background: "none", padding: "0"});

好了,现在内部链接没有标识符了,但还是会在新窗口中打开,继续。。。

第四步:让外部链接在新窗口中打开,内部链接在自身窗口打开

这一步的实现有一点点的复杂,当然如果你对jQuery非常熟悉的话还是非常简单的。前面我们在第一步已经实了文章所有链接在新窗口中打开了。但我们其实需要的只是外部链接在新窗口中打开而已,但外部链接的形式多样。变数太多,用JQ无法区别开来,但我们可以很容易区别内部链接,于是我们换下思路,“外部链接=除内部链接以外所有的链接”。在第一步的基础上我们只要排除了内部的链接就行了。但怎样排除呢。我们知道:HTML4.0增加了一个新属性:rel,这个属性用来说明链接和包含此链接页面的关系,以及链接打开的目标。我们可以给内部链接添天一个rel属性用来区分外部链接,然后用JQ的选择器排除内部链接。看下面的代码,我们在第三步的基础上修改下:

jQuery("a[href*='leotheme']").css({background: "none", padding: "0"}).attr("rel","inlinks");

现在所有的内部链接都有rel=”inlinks”这个属性了。接着我们用JQ来排除内部链接在新窗口中打开,排除的方法是,如果链接的rel不具有inlinks这个属性的话,那么它就是一个外部链接,然后我们给这个外部链接添加一个click事件,点击后在新窗口中打开。

jQuery(".entry a[rel!='inlinks']").click(function(){window.open(this.href);return false;});

NOW…现在文章的内部链接会在自身窗口中打开,而外部链接会在新窗口中打开并且还有个标识符了。效果见我的BLOG;写完了?好像是?效果也实现了?其实还没完,效果是实现了,但还有一些特殊的情况没有考滤进来。比如文章中的图片链接,锚链接…OK,继续排除这两个链接。

第五步:排除图片和锚链接

jQuery(".entry a:has(img)").css({background: "none", padding: "0"}).attr("rel","inlinks");
jQuery(".entry a[href*='#']").css({background: "none", padding: "0"}).attr("rel","inlinks");

这下是真的完了。看起来好像写了很多代码,很复杂。其实很简单。我们把它优化下,写在一起。最后的完整代码是这样的:

jQuery(".entry a[href*='http://leotheme'],.entry a:has(img),.entry a[href*=#]").css({background: "none", padding: "0"}).attr("rel","inlinks");
jQuery(".entry a[rel!='inlinks']").click(function(){window.open(this.href);return false;});

两行代码。对,就是这么简单。jQuery的选择器很强大…

本文引用地址: 

相关文章

  • 2009-08-28 -- jQuery实现背景图渐变切换 (4)
    链接的背景图切换一般都用CSS的HOVER来控制,虽然很方便,但效果不怎么酷,没有平滑效果,显得有点突然。在这篇文章里给大家介绍下如何用jQuery来实现一个平滑的渐变式背景切换。效果大家可以看下这个...
  • 2008-08-15 -- 去掉链接时虚线框的几个方法 (2)
    我想很多朋友都遇到这个问题,当点击一个链接的时候,总会出现一个虚线框。 在这介绍几种去除的方法: 1.直接给链接加是onfocus="this.blur()". 链接 2.CSS实现 ...
  • 2009-11-30 -- 不刷新(AJAX)获取文章的内容 (24)
    相信大家都知道AJAX评论这玩意。AJAX评论带来了很多好处,不用在刷新页面就能发表评论。实时提交,实时显示。很多人都用上了都给自己的BLOG上添加了这样的功能。方法在这就不说了,很多人都作了详细的讲...
  • 2009-11-28 -- WordPress评论表单验证 (10)
    wordpress的评论只是个很简单的表单。WP本身也有一个自身的验证系统。但自带的这个验证是基于后台的验证。当表单不符合规格时跳转到另一个页面。我们需要返回上一页才能继续填写表单。这样对于用户的体验...
  • 2009-11-25 -- 一个jQuery弹出层(tipsWindown) (14)
    弹出层效果网上很多很多,也没啥好说的了。写这个只是作为学习JQ的一些记录。此插件的一些方法参考了花匠的dialog;在此表示感谢。 接着说说这种弹出层的原理或者说是做法。总结下经验;首先需要一个遮罩...

发表评论28 位网友发表了评论  

  1. juse 说:

    呃。。。请问。。。是要这样加在头部吗?

    jQuery(".entry a[href*='http://juse.artery-web.com/'],.entry a:has(img),.entry a[href*=#]").css({background: "none", padding: "0"}).attr("rel","inlinks");
    jQuery(".entry a[rel!='inlinks']").click(function(){window.open(this.href);return false;});

    另外是不是还需要加上

    这个啊

  2. egboy 说:

    不错..应该顶..

评论分页 1 2 3

添加新的评论浏览评论»  

表情
icon_wink.gif icon_neutral.gif icon_mad.gif icon_twisted.gif icon_smile.gif icon_eek.gif icon_sad.gif icon_rolleyes.gif icon_razz.gif icon_redface.gif icon_surprised.gif icon_mrgreen.gif icon_lol.gif icon_idea.gif icon_biggrin.gif icon_evil.gif icon_cry.gif icon_cool.gif icon_arrow.gif icon_confused.gif icon_question.gif icon_exclaim.gif 



注意:
1、本站启用了审核机制,你的留言可能稍后才会显示,请不要重复提交,谢谢。
2、留言时的头像是Gravatar提供的服务。想设置的看这里
3、评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。