JScript|Event]面向事件驱动的编程(二)--实例讲解:将span模拟成超连接_javascript技巧
在上一篇文章《面向事件驱动的编程》中我讲了三种将事件绑定到元素的方法,而推荐使用第三种方法,即使用attachEvent/addEventListener来绑定.上一篇文章的主旨是告诉大家如何使用事件,而这一篇文章的主旨是让大家弄懂如何灵活应用事件来批处理某一类的对象行为.
首先讲一讲事件传递的概念.什么是事件传递?举个现实的例子,有个人捏了一下你的手指,你可能会说他捏了你手指,也可能会说他捏了你的手,甚至可能会说他捏了你.事实上三种说法都没错,在浏览器事件的执行中亦有相似的情况,请看下边的例子:
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
上边的例子给Input[type=button]、td、tr、tbody、table、body、html、document、window都设置了onclick事件处理函数,都是显示当前对象的id值,点击之后IE会依次出现ButtonElement、TDElement、TRElement、TBODYElement、bodyObject、HTMLElement、documentObj,而Firefox则有一点不同,它显示完documentObj之后还会显示windowObj,而IE却不会,这是因为IE的window对象没有onclick事件。从这里可以看出这些对象都受到了点击,执行了onclick事件函数,而且顺序是从事件来源对象一直往上传直到window对象,这就是浏览器的事件传递。
如何对一类元素的事件进行处理,这是本文的重点,而重点知识又在于事件的传递。从上边的例子可以看出,不管是哪里的对象引发了一个事件,最后都会往上传递,我们要做的是在事件的必经之路上处理它,建议使用window.document。再看一个例子:
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
上边的例子给window.document绑定了一个点击事件处理函数Links_Onclick,在里边我获取了事件来源对象,并且显示它的innerHTML值,可以看出不管在IE还是在Firefox,点击无忧脚本论坛1的时候会显示"无忧脚本论坛1",点击无忧脚本论坛2的时候会无忧脚本论坛2,这下明白为什么我要大费周章讲事件传递了吧?我们正是要利用这一点,实现文章标题所说的:将span元素模拟成连接元素。
分析一下连接元素的一般特点:
1、有下划线
2、鼠标移动上去会变成手型鼠标
3、点击之后会进入某一个页面(href属性)
4、可以设置目标窗口的名称(target属性)
接下来一步一步实现上边所举的特点,首先是下划线和鼠标移动上去会变成手型鼠标,这个很简单,用CSS即可,可以与脚本无关,请看示例:
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
接下来是实现“点击之后会进入某一个页面”,可以给span元素增加一个属性href保存url,同时处理它的onclick事件,这就要用到刚才我说了半天的事件传递,思路是给window.document对象绑定一个onclick处理函数,如果事件来源对象的标签名(tagName)是span,它的class属性值为link,并且它拥有一个非空href属性,就调用window.open打开href属性所保存的url。
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
点击上边示例代码所模拟出来的“连接”之后,浏览器会连接到无忧脚本论坛(http://www.51js.com),第三个特点也实现了。在这里特别说明一下:Firefox不支持直接使用src.href获取我们自定义的href属性,因此使用了IE和Firefox都支持的getAttribute(attributeName)方法,如果不存在则返回null。
最后的工作是增加target属性实现设置目标窗口的功能,要注意一点就是target属性是可有可无的,实现方法很简单,利用上边的实例就可以轻松实现,就是在window.open那里做一点点手脚,请看示例代码:
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
搞定!我们已经初步将拥有特定属性的span元素模拟成了超连接元素,当然这里边还大有文章可做,但这并不是重点,而且将span元素模拟成超连接并没有什么实用价值,毕竟已经有那么好用的A元素可以供我们使用,所以要弄明白一点:搞清楚事件的传递,并且利用它为我们做一些本来很麻烦的工作,这才是本文的重点。
好了,又要告一段落了,下一篇文章的主题还没定,估计是再来一个实例或者另开一个主题,敬请期待。
欢迎有兴趣的同志支持一下无忧脚本论坛的原创行动,一起将您的原创文章贴出来与网友分享,还记得一篇文章里说过这样的话:那些曾经帮助我们的人们,他们没有想过要得到回报,如果硬要说有,那也是希望你能够像他们那样帮助需要帮助的人。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。
