给moz-firefox下添加IE方法和属性_javascript技巧
在IECN看到心云写的关于互换select的JS,因里面用到removeNode和swapNode等方法,导致在Firefox下无效。刚刚Google了下,发现可以通过自定义原型来修正只在IE下有效的属性与方法。
原文参考:http://www.phpx.com/happy/top97619.html
修改方案如下:
<script> <BR><!-- <BR>if(window.Event){// 修正Event的DOM <BR> /* <BR> IE5 MacIE5 Mozilla Konqueror2.2 Opera5 <BR> event yes yes yes yes yes <BR> event.returnValue yes yes no no no <BR> event.cancelBubble yes yes no no no <BR> event.srcElement yes yes no no no <BR> event.fromElement yes yes no no no <br><br> */ <BR> Event.prototype.__defineSetter__("returnValue",function(b){// <BR> if(!b)this.preventDefault(); <BR> return b; <BR> }); <BR> Event.prototype.__defineSetter__("cancelBubble",function(b){// 设置或者检索当前事件句柄的层次冒泡 <BR> if(b)this.stopPropagation(); <BR> return b; <BR> }); <BR> Event.prototype.__defineGetter__("srcElement",function(){ <BR> var node=this.target; <BR> while(node.nodeType!=1)node=node.parentNode; <BR> return node; <BR> }); <BR> Event.prototype.__defineGetter__("fromElement",function(){// 返回鼠标移出的源节点 <BR> var node; <BR> if(this.type=="mouseover") <BR> node=this.relatedTarget; <BR> else if(this.type=="mouseout") <BR> node=this.target; <BR> if(!node)return; <BR> while(node.nodeType!=1)node=node.parentNode; <BR> return node; <BR> }); <BR> Event.prototype.__defineGetter__("toElement",function(){// 返回鼠标移入的源节点 <BR> var node; <BR> if(this.type=="mouseout") <BR> node=this.relatedTarget; <BR> else if(this.type=="mouseover") <BR> node=this.target; <BR> if(!node)return; <BR> while(node.nodeType!=1)node=node.parentNode; <BR> return node; <BR> }); <BR> Event.prototype.__defineGetter__("offsetX",function(){ <BR> return this.layerX; <BR> }); <BR> Event.prototype.__defineGetter__("offsetY",function(){ <BR> return this.layerY; <BR> }); <BR> } <BR>if(window.Document){// 修正Document的DOM <BR> /* <BR> IE5 MacIE5 Mozilla Konqueror2.2 Opera5 <BR> document.documentElement yes yes yes yes no <BR> document.activeElement yes null no no no <br><br> */ <BR> } <BR>if(window.Node){// 修正Node的DOM <BR> /* <BR> IE5 MacIE5 Mozilla Konqueror2.2 Opera5 <BR> Node.contains yes yes no no yes <BR> Node.replaceNode yes no no no no <BR> Node.removeNode yes no no no no <BR> Node.children yes yes no no no <BR> Node.hasChildNodes yes yes yes yes no <BR> Node.childNodes yes yes yes yes no <BR> Node.swapNode yes no no no no <BR> Node.currentStyle yes yes no no no <br><br> */ <BR> Node.prototype.replaceNode=function(Node){// 替换指定节点 <BR> this.parentNode.replaceChild(Node,this); <BR> } <BR> Node.prototype.removeNode=function(removeChildren){// 删除指定节点 <BR> if(removeChildren) <BR> return this.parentNode.removeChild(this); <BR> else{ <BR> var range=document.createRange(); <BR> range.selectNodeContents(this); <BR> return this.parentNode.replaceChild(range.extractContents(),this); <BR> } <BR> } <BR> Node.prototype.swapNode=function(Node){// 交换节点 <BR> var nextSibling=this.nextSibling; <BR> var parentNode=this.parentNode; <BR> node.parentNode.replaceChild(this,Node); <BR> parentNode.insertBefore(node,nextSibling); <BR> } <BR> } <BR>if(window.HTMLElement){ <BR> HTMLElement.prototype.__defineGetter__("all",function(){ <BR> var a=this.getElementsByTagName("*"); <BR> var node=this; <BR> a.tags=function(sTagName){ <BR> return node.getElementsByTagName(sTagName); <BR> } <BR> return a; <BR> }); <BR> HTMLElement.prototype.__defineGetter__("parentElement",function(){ <BR> if(this.parentNode==this.ownerDocument)return null; <BR> return this.parentNode; <BR> }); <BR> HTMLElement.prototype.__defineGetter__("children",function(){ <BR> var tmp=[]; <BR> var j=0; <BR> var n; <BR> for(var i=0;i<this.childNodes.length;i++){ <BR> n=this.childNodes[i]; <BR> if(n.nodeType==1){ <BR> tmp[j++]=n; <BR> if(n.name){ <BR> if(!tmp[n.name]) <BR> tmp[n.name]=[]; <BR> tmp[n.name][tmp[n.name].length]=n; <BR> } <BR> if(n.id) <BR> tmp[n.id]=n; <BR> } <BR> } <BR> return tmp; <BR> }); <BR> HTMLElement.prototype.__defineGetter__("currentStyle", function(){ <BR> return this.ownerDocument.defaultView.getComputedStyle(this,null); <BR> }); <BR> HTMLElement.prototype.__defineSetter__("outerHTML",function(sHTML){ <BR> var r=this.ownerDocument.createRange(); <BR> r.setStartBefore(this); <BR> var df=r.createContextualFragment(sHTML); <BR> this.parentNode.replaceChild(df,this); <BR> return sHTML; <BR> }); <BR> HTMLElement.prototype.__defineGetter__("outerHTML",function(){ <BR> var attr; <BR> var attrs=this.attributes; <BR> var str="<"+this.tagName; <BR> for(var i=0;i<attrs.length;i++){ <BR> attr=attrs[i]; <BR> if(attr.specified) <BR> str+=" "+attr.name+'="'+attr.value+'"'; <BR> } <BR> if(!this.canHaveChildren) <BR> return str+">"; <BR> return str+">"+this.innerHTML+"</"+this.tagName+">"; <BR> }); <BR> HTMLElement.prototype.__defineGetter__("canHaveChildren",function(){ <BR> switch(this.tagName.toLowerCase()){ <BR> case "area": <BR> case "base": <BR> case "basefont": <BR> case "col": <BR> case "frame": <BR> case "hr": <BR> case "img": <BR> case "br": <BR> case "input": <BR> case "isindex": <BR> case "link": <BR> case "meta": <BR> case "param": <BR> return false; <BR> } <BR> return true; <BR> }); <br><br> HTMLElement.prototype.__defineSetter__("innerText",function(sText){ <BR> var parsedText=document.createTextNode(sText); <BR> this.innerHTML=parsedText; <BR> return parsedText; <BR> }); <BR> HTMLElement.prototype.__defineGetter__("innerText",function(){ <BR> var r=this.ownerDocument.createRange(); <BR> r.selectNodeContents(this); <BR> return r.toString(); <BR> }); <BR> HTMLElement.prototype.__defineSetter__("outerText",function(sText){ <BR> var parsedText=document.createTextNode(sText); <BR> this.outerHTML=parsedText; <BR> return parsedText; <BR> }); <BR> HTMLElement.prototype.__defineGetter__("outerText",function(){ <BR> var r=this.ownerDocument.createRange(); <BR> r.selectNodeContents(this); <BR> return r.toString(); <BR> }); <BR> HTMLElement.prototype.attachEvent=function(sType,fHandler){ <BR> var shortTypeName=sType.replace(/on/,""); <BR> fHandler._ieEmuEventHandler=function(e){ <BR> window.event=e; <BR> return fHandler(); <BR> } <BR> this.addEventListener(shortTypeName,fHandler._ieEmuEventHandler,false); <BR> } <BR> HTMLElement.prototype.detachEvent=function(sType,fHandler){ <BR> var shortTypeName=sType.replace(/on/,""); <BR> if(typeof(fHandler._ieEmuEventHandler)=="function") <BR> this.removeEventListener(shortTypeName,fHandler._ieEmuEventHandler,false); <BR> else <BR> this.removeEventListener(shortTypeName,fHandler,true); <BR> } <BR> HTMLElement.prototype.contains=function(Node){// 是否包含某节点 <BR> do if(Node==this)return true; <BR> while(Node=Node.parentNode); <BR> return false; <BR> } <BR> HTMLElement.prototype.insertAdjacentElement=function(where,parsedNode){ <BR> switch(where){ <BR> case "beforeBegin": <BR> this.parentNode.insertBefore(parsedNode,this); <BR> break; <BR> case "afterBegin": <BR> this.insertBefore(parsedNode,this.firstChild); <BR> break; <BR> case "beforeEnd": <BR> this.appendChild(parsedNode); <BR> break; <BR> case "afterEnd": <BR> if(this.nextSibling) <BR> this.parentNode.insertBefore(parsedNode,this.nextSibling); <BR> else <BR> this.parentNode.appendChild(parsedNode); <BR> break; <BR> } <BR> } <BR> HTMLElement.prototype.insertAdjacentHTML=function(where,htmlStr){ <BR> var r=this.ownerDocument.createRange(); <BR> r.setStartBefore(this); <BR> var parsedHTML=r.createContextualFragment(htmlStr); <BR> this.insertAdjacentElement(where,parsedHTML); <BR> } <BR> HTMLElement.prototype.insertAdjacentText=function(where,txtStr){ <BR> var parsedText=document.createTextNode(txtStr); <BR> this.insertAdjacentElement(where,parsedText); <BR> } <BR> HTMLElement.prototype.attachEvent=function(sType,fHandler){ <BR> var shortTypeName=sType.replace(/on/,""); <BR> fHandler._ieEmuEventHandler=function(e){ <BR> window.event=e; <BR> return fHandler(); <BR> } <BR> this.addEventListener(shortTypeName,fHandler._ieEmuEventHandler,false); <BR> } <BR> HTMLElement.prototype.detachEvent=function(sType,fHandler){ <BR> var shortTypeName=sType.replace(/on/,""); <BR> if(typeof(fHandler._ieEmuEventHandler)=="function") <BR> this.removeEventListener(shortTypeName,fHandler._ieEmuEventHandler,false); <BR> else <BR> this.removeEventListener(shortTypeName,fHandler,true); <BR> } <BR> } <BR>//--> <BR></script>

熱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引擎在解析和執行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技術實現與服務器的無刷新通信。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。
