手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:Javascript

搜索引擎关键字高亮

昨天在网上闲逛,发现Qihangnet的博客上有篇文章,很老的。06年的,介绍了如何让通过搜索引擎过来的关键字高亮。原文来自于支 持百度的搜索引擎来源的关键字加亮,仔细看了一下,文中介绍了一段JS,那段JS是这个网站http://www.kryogenix.org/code/browser/searchhi/的。再根据Qihangnet的文章,我也尝试进行了一些转换,找了网上的一些javascript的gb2312toUTF8的代码,结果却死活不正常。出来都是乱码。分析了一下searchhi的源码。核心的一块就是在判断浏览器过来的参数。于是我在无法用JS转换编码后用PHP实现了一下(其实很恶心,百度到现在都是GB2312......)。

PHP代码
  1. function getReferer ()  
  2. {  
  3.     if(isset( $_SERVER['HTTP_REFERER'] )){  
  4.         parse_strparse_url$_SERVER['HTTP_REFERER'] , PHP_URL_QUERY  ) , $query);  
  5.         if(isSet( $query['q'] ) ){  
  6.             return $query['q'];  
  7.         }else if ( isSet( $query['p'] ) ){  
  8.             return $query['p'];  
  9.         }else if ( isSet( $query['wd'] ) ){  
  10.             if(!$query['wd']){  
  11.                 return '';  
  12.             }  
  13.                         return iconv( 'gb2312''utf-8', urldecode( $query['wd'] ) );  
  14.             //return urlencode(iconv( 'gb2312', 'utf-8', urldecode( $query['wd'] ) ));  
  15.         }  
  16.     }  
  17.     return '';  
  18. }  

取回这个referer后的参数后,再用searchhi的代码进行高亮了一下。因为我只是简单实现,所以效果很差。理论上应该是要根据传递过来的参数右下角弹窗,进行文章推荐的。。但我懒得搞了。直接就searchhi的代码简单实现了一下。
效果如下:

大小: 93.62 K
尺寸: 322 x 376
浏览: 1828 次
点击打开新窗口浏览全图

 

如何使页面的链接在新窗口中打开

我不知道这篇文章怎么算,因为我最后还是用了JS,所以我归类到javascript分类了。

页面中的链接在新窗口中打开,一般出现在专题、网页地图、列表中,因为在一般的网页里,如果所有的链接都是开新窗口,肯定用户体验一般。而如果每个链接都加上target="_blank"的话,仿佛听说是不符合w3c规范。但我是觉得,如果一个网页有上百个链接,都加上Target="_blank",那是多少字节啊。

虽然现在不再是“惜字节如金”,但该节约的还是要节约。

于是我在页面的<head>标签里加上了<base target="_blank" />,因为记忆中,这个标签还可以控制showModalDialog里的链接不开新窗口或者影响父窗口(当然那时候是<base target="_self">)

兴冲冲的放到网上,结果同事测试下来,IE6和Firefox都正常。但IE7和IE8却都不正常。没办法,只能用js解决。本想用jquery来搞定,但为了这么小的功能就加载一个几十K的jQuery,我还不如直接在链接里加上target="_blank"呢。

最后写了如下代码:

JavaScript代码
  1. var aTag = document.getElementsByTagName('a');  
  2. for(i in aTag){  
  3.     aTag[i].target='_blank';  
  4. }  

OH YEAH,搞定。

 

Tags: base, target

setInterval和setTimeout到底有啥区别?

对于javascript的setInterval和setTimeout,很多人到现在一直搞不清楚。其实,真的很简单,也很方便的就能让人搞清楚在什么时候用什么函数。

当然我说的是简单的方法,请打开词霸,查看interval和timeout,就可以明白很多了

interval: n. 间隔;幕间休息;间距

timeout: n. 暂时休息;工间休息;超时

看到这两个意思,估计你也可以明白,setTimeout是在超过你定义的时间后,执行。而setInterval是间隔你定义时间区间执行函数。这样解释就让你明白很多了吧?

以前写的:

之所以写这篇文章,主要是因为看了http://www.phpweblog.net/jig68/archive/2010/03/17/7137.html这篇博客。才明白还是有很多人不太了解这方面,所以,换个简单的解释方法,总可以让人明白了吧?
PS:意外啊,一不小心多复制了点代码。。。

Tags: setinterval, settimeout

Javascript:不要将属性写在prototype里

没有仔细研究过,但觉得得这就象PHP的类(Class)的复制和引用的关系。好象差不多。

原文来自:http://www.beiju123.cn/blog/?p=304

年前,某次分享会上听玉伯偶然说了这句话,当时糊里糊涂,不明所以,偶然有一天我做一个东西,发现某个对象的实例之间竟然会互相操作了定义在 prototype里的属性,于是我验证了下:

JavaScript代码
  1. var objA=function(){  
  2.   
  3. }  
  4. objA.prototype={  
  5.     name:{},  
  6.     setName:function(str){  
  7.         this.name=str;  
  8.     },  
  9.     getName:function(){  
  10.         return this.name;  
  11.     }  
  12. }  
  13. var a=new objA();  
  14.   
  15. var b=new objA();  
  16. //a.name={firstname:"孙",fathername:"信宇"};//undefined  
  17. a.name.firstname="孙";//弹出sun  
  18. alert(b.name.firstname);  

在这个例子里,当我修改实例a的name属性的时候,实例b的name属性页跟着变了,而且说明他们引用了同一份对象.

如果name属性是值类型,例如字符串,就不会与这种问题了,那是因为字符串每次被操作都返回新实例,当然反映不出冲突来了.
那为什么会出现这种冲突呢?
专业术语我不太会讲,但是prototype这种原型继承的好处其实就是节省程序运行空间,当你从objA实例化两个实例:a和b时,并不会创建两份属性 和方法,而是把他们都指向一份属性和方法,所以prototype里的所有的东西都被所有的实例共享,实例中保存的只是一个json索引.
正因为如此,如果整个改变name的值的话,让他指向别的对象,这样就不会互相影响了,而且对于值类型来说,本质就是每次操作都会返回新的实例,所以不会 出现冲突.
对于这种冲突来说,最好的解决办法就是将属性从prototype里移出来,写在构造函数里:

JavaScript代码
  1. var objA=function(){  
  2.     this.name={}  
  3. }  
  4. objA.prototype={  
  5.     setName:function(str){  
  6.         this.name=str;  
  7.     },  
  8.     getName:function(){  
  9.         return this.name;  
  10.     }  
  11. }  

这样再试一次就会发现,每次创建实例都会创建一个新的name属性对象,而不是指向同一个对象;
也可以在prototype理的init方法里用this.name={}来初始化配置参数,属性等内容,反正就是不能写在prototype里面.但是 可以在函数里初始化定义.

还有一点要注意:我个人认为,js里所有的东西都是对象,包括值类型,他们之所以表现出非引用类型的性质,是因为每次对这些对象操作都会返回新的实 例,这只是一种假象,事实上可以说,js里所有的东西都是引用类型,只是值类型在被操作时引用总是被改变,表面上来看就是非引用类型了.

--EOF--

即使是上面的情况,我还是认为可以看看

http://lifesinger.org/blog/2009/01/javascript-run-mechanism/

http://www.cnblogs.com/rainman/archive/2009/04/28/1445687.html

带动画的GIF图片在IE中不能正常工作

这个问题,怎么说呢,先把症状重复一遍吧:IE显示了图片,但是动画却不能播放。而在FirFox中却能正常的工作。
一直以来,我都以为是浏览器的关系。没有设定好而导致这种情况发生,比如一些在IE核心上开发的浏览器(maxthon)等,都可以把GIF动画关闭的。所以我也就没有仔细研究过。

来看看这个:
IE和FirFox在很多地方都有着或多或少的不同,这导致在开发时需要考虑很多的特殊情况。在最近的项目中居然发现带动画的GIF图片在页面Load之 后再以脚本控制的方式展现时,动画不能表现出来。在我的项目中,需要在点击一个按钮后来显示一个动态的Loading图片以此表示程序正在进行后台处理。 这是通过一段jQuery代码来实现的:

XML/HTML代码
  1. <font size="3" face="Calibri"><script language="javascript" type="text/javascript">function showMessage() {  
  2.         ......  
  3.         $("div#Processing").show();  
  4.         ......  
  5.     }</script>  
  6. <div id="Processing" style="display: none">  
  7.     <center>  
  8.         <img src="placeOrder_processing.gif" />  
  9.     </center>  
  10. </div></font>  

E显示了图片,但是动画却不能播放。而在FirFox中却能正常的工作。当你将整个DIV加入到DOM中时,这个DIV是隐藏的,不可见的。但是当你将其 属性设置为可见时,动画却不能被正常播放。如果将带动画的GIF图片直接以可见的形式加入到DOM中,它是可以正确的现实并播放动画的。那么,可以这样更 改代码:

XML/HTML代码
  1. <font size="3" face="Calibri"><script language="javascript" type="text/javascript">  
  2.     function showMessage() {  
  3.          
  4.         $("div#Processing").show();  
  5.         var imgSrc = '<%=ResolveUrl("~/Images/Checkout/placeOrder_processing.gif") %>';  
  6.         $("td#imgSection").append("<img src='" + imgSrc + "'/>");  
  7.           
  8.     }     
  9. </script></font>  

这样,在可见的内容中将Img加入到DOM中就可以解决这个问题了。
--EOF--
贴出这个案例地址是在:http://www.cnblogs.com/zlgcool/archive/2010/03/15/1686507.html,真的很意外的例子,所以就记录下来了