[JavaScript]自定义Title的显示方式

简介:
好久没有写blog了,今天更新下最近在做的事情,顺便让朋友们了解下, 我还顽强地活着 ...


最近刚做完公司的WEB MVP 开发框架.累得脑子快要抽筋了,可是即使要抽筋了,也得继续上啊...谁叫俺是打工仔呢.

现在研究的重点转移到了客户端,于是开始钻研起dojo,prototype,yui......

发现javascript也在OO呢(虽然只是同vb一样基于对象的)~~~呵呵

以前只会找要的js代码,然后改啊改啊...从来没有认真的学习过,这次决定好好学学这个Web开发必不可少的东东...

好了废话不扯了,这次的任务就是做Title的自定义显示.

我想IE的Tip显示方式,肯定大家都不满意吧.每一天有多少人在做着自己的自定义显示.

俺可没有那么多精力,先是从网络上找找到了一个老外的程序 qTip: http://solardreamstudios.com/_img/learn/css/qtip/qTip.html

仔细看了看代码,发现几个问题:
1.这个老外只做了一半,它只对单个Tag的所有元素集合进行自定义显示
1 var qTipTag = "a";  // Which tag do you want to qTip-ize? Keep it lowercase!//

2.循环出来每个挂载mouse事件
1 var anchors = document.getElementsByTagName (qTipTag);
2
3      for ( var i = 0; i < anchors.length; i ++)  {
4//.
5}


3.Event采用赋值形式
1     a.onmouseover =  function()  {tooltip.show(this.getAttribute('tiptitle'))};
2             a.onmouseout =  function()  {tooltip.hide()};
3

OK.针对这些问题,我们开始我们的重构之旅

1.首先,我希望页面控件的所有Tag只要有Title的,我都要采用自定义显示,这时想到一个最土的招就是
var anchors = document.all;

2.它的实现方式是循环找到所有的有标记的Tag,然后设置mouse事件.
  这一步我觉得有2个问题:
  a.每个tag都设置mouse的事件,显然页面变大了,特别是我现在要求所有的Tag都要自定义显示
  b.Event采用赋值.......寒一个

  我的思路是使用事件的串连机制,把mouse的事件直接挂载到document上面,然后进行冒泡处理(我不知道这样的效率实际上是更好呢,还是更坏,自我感觉应该会好些吧?:))

 
 1 document.attachEvent("onmouseover", function(e)
 2          {            
 3            if(typeof(event)=="undefined"){
 4                sTitle = e.target.getAttribute("title")
 5                e.target.removeAttribute("title");
 6            }
else{
 7                e    = event;
 8                sTitle = e.srcElement.title;
 9                e.srcElement.title = "";
10            }
;
11    
12            if(!sTitle == "")
13            {        
14                tooltip.show(sTitle);
15            }

16        }

17     );
18
19     document.attachEvent('onmouseout', function(e)
20          {
21
22            if(typeof(event)=="undefined"){
23                e.target.setAttribute("title",sTitle);
24            }
else{
25                e    = event;
26                e.srcElement.title = sTitle;
27            }
;
28            
29            tooltip.hide();
30        
31        }

32     );
33

当然这里或许会碰到的所谓的IE 内存泄漏,因为没有detachEvent.(本来想使用Event.observer的,不过prototype还不谈熟,加上脑子也晕乎乎了,留待下次重构吧)...

document.attachEvent 

看来好像只支持IE哦....还是对少数的其他Fans支持一下吧,修改一下系统方法,让它适当兼容一下其他浏览器
 1 if(!document.attachEvent) // Not IE
 2 {
 3    document.attachEvent = function(){document.addEventListener(arguments[0].substr(2),arguments[1],arguments[2])}
 4}

 5
 6 if(!window.attachEvent) // Not IE
 7 {
 8    window.attachEvent = function(){window.addEventListener(arguments[0].substr(2),arguments[1],arguments[2])}
 9}

10


这样子,大概qTip的功能就重构结束了...

当然还有很多可以改进的地方,比如把提示用的层设计得漂亮一点...

     if(!tipContainer)  {
      tipContainer = document.createElementNS ? document.createElementNS(tipNameSpaceURI, "div") : document.createElement("div");
        tipContainer.setAttribute("id", tipContainerID);
//美化下?
      document.getElementsByTagName("body").item(0).appendChild(tipContainer);
    }


重构后的源文件(在需要的页面link这2个文件就好了):

qTip.js

 

qTip.css


 



本文转自浪子博客园博客,原文链接:http://www.cnblogs.com/walkingboy/archive/2006/08/03/ClientScript_qTip.html,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
开发框架 前端开发 JavaScript
在Vue&Element前端项目中,使用FastReport + pdf.js生成并展示自定义报表
在Vue&Element前端项目中,使用FastReport + pdf.js生成并展示自定义报表
|
8月前
|
前端开发 JavaScript
使用JavaScript实现复杂功能:构建一个自定义的拖拽功能
使用JavaScript实现复杂功能:构建一个自定义的拖拽功能
|
5月前
|
存储 前端开发 JavaScript
javascript 异常问题之为自定义异常提供丰富的上下文信息如何实现
javascript 异常问题之为自定义异常提供丰富的上下文信息如何实现
|
3月前
|
移动开发 JavaScript 前端开发
原生js如何获取dom元素的自定义属性
原生js如何获取dom元素的自定义属性
97 4
|
5月前
|
前端开发 微服务 API
微服务浪潮下的JSF革新:如何在分散式架构中构建统一而强大的Web界面
【8月更文挑战第31天】随着微服务架构的兴起,企业将应用拆分成小型、独立的服务以提高系统可维护性和可扩展性。本文探讨如何在微服务架构下构建和部署JavaServer Faces (JSF) 应用,通过RESTful服务实现前后端分离,提升灵活性和适应性。
69 1
|
5月前
|
前端开发 程序员
HTML+CSS+JavaScript制作动态七夕表白网页(含音乐+自定义文字)
一年一度的520情人节/七夕情人节/女朋友生日/程序员表白,是不是要给女朋友或者正在追求的妹子一点小惊喜呢,今天这篇博客就分享下前端代码如何实现HTML+CSS+JavaScript制作七夕表白网页(含音乐+自定义文字)。赶紧学会了,来制作属于我们程序员的浪漫吧!
151 0
|
6月前
|
JavaScript NoSQL Serverless
函数计算产品使用问题之如何创建一个自定义运行时并指定Node.js版本
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
5月前
|
JavaScript 前端开发 数据安全/隐私保护
Vue.js 表单处理技巧大揭秘!v-model 与自定义验证综合运用,打造高效表单处理体验!
【8月更文挑战第31天】Vue.js 是一款备受欢迎的前端框架,其表单处理功能强大且灵活。v-model 指令可实现双向数据绑定,简化表单元素值与 Vue 实例数据的同步过程;结合自定义验证规则,则能确保用户输入数据符合特定要求。无论是简单的单字段校验还是复杂的多字段验证,Vue.js 均提供了简洁有效的解决方案,有效提升了表单处理效率及用户体验。通过综合运用 v-model 和自定义验证,开发者能够实时反馈错误信息并控制表单状态,从而增强应用的交互性与可靠性。
77 0
|
5月前
|
JavaScript PHP 开发者
PHP中的异常处理与自定义错误处理器构建高效Web应用:Node.js与Express框架实战指南
【8月更文挑战第27天】在PHP编程世界中,异常处理和错误管理是代码健壮性的关键。本文将深入探讨PHP的异常处理机制,并指导你如何创建自定义错误处理器,以便优雅地管理运行时错误。我们将一起学习如何使用try-catch块捕获异常,以及如何通过set_error_handler函数定制错误响应。准备好让你的代码变得更加可靠,同时提供更友好的错误信息给最终用户。
|
8月前
|
存储 设计模式 监控
如何构建自定义 Node.js 事件发射器
如何构建自定义 Node.js 事件发射器
634 2