昨天在网上闲逛,发现Qihangnet的博客上有篇文章,很老的。06年的,介绍了如何让通过搜索引擎过来的关键字高亮。原文来自于支 持百度的搜索引擎来源的关键字加亮,仔细看了一下,文中介绍了一段JS,那段JS是这个网站http://www.kryogenix.org/code/browser/searchhi/的。再根据Qihangnet的文章,我也尝试进行了一些转换,找了网上的一些javascript的gb2312toUTF8的代码,结果却死活不正常。出来都是乱码。分析了一下searchhi的源码。核心的一块就是在判断浏览器过来的参数。于是我在无法用JS转换编码后用PHP实现了一下(其实很恶心,百度到现在都是GB2312......)。
PHP代码
- function getReferer ()
- {
- if(isset( $_SERVER['HTTP_REFERER'] )){
- parse_str( parse_url( $_SERVER['HTTP_REFERER'] , PHP_URL_QUERY ) , $query);
- if(isSet( $query['q'] ) ){
- return $query['q'];
- }else if ( isSet( $query['p'] ) ){
- return $query['p'];
- }else if ( isSet( $query['wd'] ) ){
- if(!$query['wd']){
- return '';
- }
- return iconv( 'gb2312', 'utf-8', urldecode( $query['wd'] ) );
-
- }
- }
- return '';
- }
取回这个referer后的参数后,再用searchhi的代码进行高亮了一下。因为我只是简单实现,所以效果很差。理论上应该是要根据传递过来的参数右下角弹窗,进行文章推荐的。。但我懒得搞了。直接就searchhi的代码简单实现了一下。
效果如下:
我不知道这篇文章怎么算,因为我最后还是用了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代码
- var aTag = document.getElementsByTagName('a');
- for(i in aTag){
- aTag[i].target='_blank';
- }
OH YEAH,搞定。
对于javascript的setInterval和setTimeout,很多人到现在一直搞不清楚。其实,真的很简单,也很方便的就能让人搞清楚在什么时候用什么函数。
当然我说的是简单的方法,请打开词霸,查看interval和timeout,就可以明白很多了
interval: n. 间隔;幕间休息;间距
timeout: n. 暂时休息;工间休息;超时
看到这两个意思,估计你也可以明白,setTimeout是在超过你定义的时间后,执行。而setInterval是间隔你定义时间区间执行函数。这样解释就让你明白很多了吧?
以前写的:
之所以写这篇文章,主要是因为看了http://www.phpweblog.net/jig68/archive/2010/03/17/7137.html这篇博客。才明白还是有很多人不太了解这方面,所以,换个简单的解释方法,总可以让人明白了吧?
PS:意外啊,一不小心多复制了点代码。。。
没有仔细研究过,但觉得得这就象PHP的类(Class)的复制和引用的关系。好象差不多。
原文来自:http://www.beiju123.cn/blog/?p=304
年前,某次分享会上听玉伯偶然说了这句话,当时糊里糊涂,不明所以,偶然有一天我做一个东西,发现某个对象的实例之间竟然会互相操作了定义在 prototype里的属性,于是我验证了下:
JavaScript代码
- var objA=function(){
-
- }
- objA.prototype={
- name:{},
- setName:function(str){
- this.name=str;
- },
- getName:function(){
- return this.name;
- }
- }
- var a=new objA();
-
- var b=new objA();
-
- a.name.firstname="孙";
- alert(b.name.firstname);
在这个例子里,当我修改实例a的name属性的时候,实例b的name属性页跟着变了,而且说明他们引用了同一份对象.
如果name属性是值类型,例如字符串,就不会与这种问题了,那是因为字符串每次被操作都返回新实例,当然反映不出冲突来了.
那为什么会出现这种冲突呢?
专业术语我不太会讲,但是prototype这种原型继承的好处其实就是节省程序运行空间,当你从objA实例化两个实例:a和b时,并不会创建两份属性 和方法,而是把他们都指向一份属性和方法,所以prototype里的所有的东西都被所有的实例共享,实例中保存的只是一个json索引.
正因为如此,如果整个改变name的值的话,让他指向别的对象,这样就不会互相影响了,而且对于值类型来说,本质就是每次操作都会返回新的实例,所以不会 出现冲突.
对于这种冲突来说,最好的解决办法就是将属性从prototype里移出来,写在构造函数里:
JavaScript代码
- var objA=function(){
- this.name={}
- }
- objA.prototype={
- setName:function(str){
- this.name=str;
- },
- getName:function(){
- return this.name;
- }
- }
这样再试一次就会发现,每次创建实例都会创建一个新的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
这个问题,怎么说呢,先把症状重复一遍吧:IE显示了图片,但是动画却不能播放。而在FirFox中却能正常的工作。
一直以来,我都以为是浏览器的关系。没有设定好而导致这种情况发生,比如一些在IE核心上开发的浏览器(maxthon)等,都可以把GIF动画关闭的。所以我也就没有仔细研究过。
来看看这个:
IE和FirFox在很多地方都有着或多或少的不同,这导致在开发时需要考虑很多的特殊情况。在最近的项目中居然发现带动画的GIF图片在页面Load之 后再以脚本控制的方式展现时,动画不能表现出来。在我的项目中,需要在点击一个按钮后来显示一个动态的Loading图片以此表示程序正在进行后台处理。 这是通过一段jQuery代码来实现的:
XML/HTML代码
- <font size="3" face="Calibri"><script language="javascript" type="text/javascript">function showMessage() {
- ......
- $("div#Processing").show();
- ......
- }</script>
- <div id="Processing" style="display: none">
- <center>
- <img src="placeOrder_processing.gif" />
- </center>
- </div></font>
E显示了图片,但是动画却不能播放。而在FirFox中却能正常的工作。当你将整个DIV加入到DOM中时,这个DIV是隐藏的,不可见的。但是当你将其 属性设置为可见时,动画却不能被正常播放。如果将带动画的GIF图片直接以可见的形式加入到DOM中,它是可以正确的现实并播放动画的。那么,可以这样更 改代码:
XML/HTML代码
- <font size="3" face="Calibri"><script language="javascript" type="text/javascript">
- function showMessage() {
-
- $("div#Processing").show();
- var imgSrc = '<%=ResolveUrl("~/Images/Checkout/placeOrder_processing.gif") %>';
- $("td#imgSection").append("<img src='" + imgSrc + "'/>");
-
- }
- </script></font>
这样,在可见的内容中将Img加入到DOM中就可以解决这个问题了。
--EOF--
贴出这个案例地址是在:http://www.cnblogs.com/zlgcool/archive/2010/03/15/1686507.html,真的很意外的例子,所以就记录下来了