`
weick
  • 浏览: 70609 次
  • 性别: Icon_minigender_1
  • 来自: 天堂的隔壁
社区版块
存档分类
最新评论

开发跨浏览器javascript常见注意事项

    博客分类:
  • js
阅读更多
转自:http://www.jb51.net/article/17023.htm 一、向表追加行 在以往使用Ajax的经历中,你很可能会使用JavaScript向现有的表中追加行,或者从头创建包含表行的新表。document.createElement和document.appendChiid方法可以使这很容易做到,只需使用document.createElement创建表单元格,再使用document.app-endChild方法将这些表单元格增加到表行。接下来的编辑步骤是使用document.append- Child将表行增加到表中。 在Firefox、Safari和Opera等当前浏览器中,这样做是可以的。不过,如果使用的是lE,表行则不会在表中出现。更糟糕的是,IE甚至不抛出任何错误,或对表行确实已经追加到表中却不会显示出来的问题提供任何线索。 在这种情况下,解决方法很简单。IE允许将tr元素增加到tbody元素,而不是直接增加到table元素。例如,如果定义一个空表如下:
向这个表中增加行的正确做法是把行增加到表体,而不是增加到表,如下所示: var cell=document.createElement("td").appendChild(document.createTextNode("foo")); vat row=document.createElement("tr").appendChild(cell); document.getElementByld("myTableBody").appendChiid(row); 辛运的是,这种方法在所有当前浏览器上都能用,也包括IE。如果你养成习惯,总是使用表中的表体,就不用担心这个问题了。 二 通过javascript设置元素的样式 利用Ajax技术,开发人员创建的Web应用可以与服务器无缝地通信,而无需完全页面刷新。但对于A1ax请求,是不会出现这种页面闪烁的,所以用户可能不知道页面上有些数据已经更新。你可能想修改某些元素的样式,指示页面上一些数据已经改变。例如,如果股票的价格已经通过Ajax请求得到了无缝更新,可以加亮显示这支股票的名字。 可以通过JavaScript使用元素的setAttribute方法设置元素的样式。例如,要把span元素中的文本修改为采用红色粗体显示.可以使用setAttribute疗法如下: var spanElement = document.getElementById("mySpan"); spanElement.setAttribute("style", "font-weight:bold; color:red;"); 除了IE、这种方法在当前其他浏览器上都是行得通的。对于IE,解决方法是使用元素style对象的cssText属性来设置所需的样式.尽管这个属性不是标准的,但得到了广泛支持,如下所示: var spanElement = document.getElementById("mySpan"); spanElement.style.cssText = "font-weight:bold; color:red;"; 这种方法在IE和大多数其他浏览器上部能很好地工作,只有Opera除外。为了让代码在所有当前浏览器上都可移植,可以同时使用这两种方法,也就是既使用setAttribute方法,也使用元素style对象的cssText属性,如下所示: var spanElement = document.getElementById("mySpan"); spanElement.setAttribute("style", "font-weight:bold; color:red;"); spanElement.style.cssText = "font-weight:bold; color:red;"; 这样一来,在当前所有浏览器上都能正常地设置元素的样式了。 三、设置元素的class属性 读过前一节后,了解到可以通过JavaScript来设置元素的内联样式,你可能想当然地认为,简单地设置无素的class属件应该是最容易的了。遗憾的是,并不如此。与设置元素内联样式类似,通过JavaScript动态地设置元素的class属性时也存在一些特异性。 你可能已经猜到了,IE是当前浏览器中的一个异类,不过解决方法倒也相当简单。使用Firefox和Safari之类的浏览器时,可以使用元素的setAttribute方法来设置冗素的class属性,如下所示: var element = document.getElementById("myElement"); element.setAttribute("class", "styleC1ass"); 奇怪的是,如果使用setAttribute方法,并指定属性名为class,IE并不会设置元素的class属性。相反,只使用setAttribute方法时IE会自己识别className属性。对于这种情况,完备的解决方法是:使用元素的setAttribute方法时,将class和className都用作属性名,如下所不: var element = document.getElementById("myElement"); element.setAttribute("class", "styleC1ass"); element.setAttribute("className", "styleC1ass"); 当前大多数浏览器都会使用class属性名而忽略className,IE则正好相反。 四、创建输入元素 输入元素为用户提供了与页面交互的手段。HTML本身有一组有限的输入元素,包括单行文本框、多行文本框、选择框、按钮、复选框和单选钮。你可能想使用JavaScfipt动态地刨建这样一些输入元素作为Ajax实现的一部分。 单行文本框、按钮、复选框和单选钮都可以创建为输入元素,只是type属性的值有所不同。选择框和文本区有自己特有的标记。通过JavaScript动态地创建输入元素很简单(但单选钮除外,这在“刨建单选钮”一节再做解释),只要遵循一些简单的规则就行。使用document.createElement方法可以很容易地创建选择框和文本区,只需向document.cr eateElement传递元素的标记名,如select或textarea。 单行文本框、按钮、复选框和单选钮稍难一些,因为它们都有同样的元素名input,只是type属性的值不同。所以,要创建这些元素,不仅需要使用document.createElement方法,后面还要调用元素的setAttribute方法来设置type属性的值。这并不难,但确实要多加一行代码. 考虑在哪里把新创建的输入元素增加到其父元素中,必须注意document.createElement和setAttribute语句的顺序。在某些浏览器中,只有刨建了元素,而且正确地设置了type属性时,于会把新创建的元素增加到其父元素中。例如,以下代码段存某些浏览器中可能有奇怪的行为: document.getElementById("formElement").appendChild(button); button.setAttribute("type", "button"); 为了避免奇怪的行为,要确保刨建输入元素后设置其所有属性,特别是type属性,然后再把它增加到父元素中,如下: var button = document.createElement("input"): button.setAttribute("type", "button"); document.getElementById("formElement").appendChild(button); 遵循这个简单的规则,有助于消除以后可能出现的一些难于诊断的问题。 五 向输入元素增加事情处理程序 向输入元素增加事件处理程序应该与使用setAttribute方法并指定事件处理程序的名字和所需函数处理程序的名字一样容易,对吗?错。设置元素的事件处理程序的标准做法是使用元素的setAttribute方法,它以事件名作为属性名,并把函数处理程序作为属性值.如下所示: var formElement = document,getElementById("formElement"); formElement.setAttribute("onclick", "doFoo();"); 除了IE上面的代码在所有当前浏览器中都能工作。如果在IE中使用JavaScfipt设置元素的事件处理程序,必须对元素使用点记法来引用所需的事件处理程序,非把它赋为匿名函数,这个匿名函数需要调用所需的事什处理程序,如下所示: var formElement = document,getElementById("formElement"); formElement.onclick = function() { doFoo(); }; 注意,是如何通过点记法从formElement引用onclick事件处理程序。onclick事什处理程序赋为一个匿名函数,这个匿名函数只是调用了所需的事件处理程序.在这个例子中事件处理程序就是doFoo。 幸运的是,这种技术得到了IE和所有其他当前浏览器的支持.所以完全可以通过JavaScfipt动态地设置表单元素的事件处理程序。 六、创建单选按钮 最好的总是留在最后。通过JavaScript动态地创建单选钮是很费劲的,因为IE中创建单选钮的方法与其他浏览器所用的方法大相径庭。 除了IE,当前所有其他浏览器都允许使用以下方法创建单选钮(这些方法应该能想得到): var radioButton = document.createElement("input"); radioButton.setAttribute("type", "radlo"); radioButton.setAttribute("name", "radioButton"); radioButton.setAttribute("value", "checked"); 这样就能在除IE以外的所有当前浏览器中创建单选选钮,而且能正常工作。在lE中,单选钮确实会显示出来.但是无法将其选中,因为点击单选钮行不按我们预想得那样使之选中。在IE中,创建单选钮的方法与其他浏览器所用的方法完全不同,而且根本不兼容。对于前面建立的单选钮,在IE中可以如下建立: var radioButton = decument.createElement(""); 好在,IE中确实可以通过JavaScript动态地创建单选钮,只不过难些,而且与其他浏览器不兼容。 如何克服这个限制呢?答案很简单,这就是需要某种浏览器嗅探(browser-sniffing)机制,使得在创建单选钮时脚本就能知道该使用哪个方法。幸运的是,你不用检查大量不同的浏览器。假设只使用现代浏览器,脚本只需要在IE和其他浏览器间进行区分就行了。 IE能识别出名为uniqueID的document对象的专用属性,名为uniqueID。IE也是惟一能识别这个属性的浏览器,所以uniqueID很适合用来确定脚本是不是在IE中运行。 使用docurnent.uniqueID属性来确定脚本在哪个浏览器中运行时,可以结合IE特定的办法和标准兼容的方法,这就会得到以下代码: if(document.uniqueID) { //Internet Explorer var radioButton = decument.createElement(""); } else { //Standards Compliant var radioButton = document.createElement("input"); radioButton.setAttribute("type", "radlo"); radioButton.setAttribute("name", "radioButton"); radioButton.setAttribute("value", "checked"); }
分享到:
评论

相关推荐

    360浏览器插件开发文档与范例

    扩展文档通常包含了开发过程中的注意事项、最佳实践以及常见问题解答。对于初学者来说,这是一个非常宝贵的参考资料,可以帮助避免常见的错误和陷阱。 四、ExtDemo说明.txt 这是对扩展范例的详细说明,通过具体的...

    css与javascript跨浏览器兼容性总结

    CSS与JavaScript跨浏览器兼容性是一个长期以来前端开发者关注的重要话题,它主要涉及不同浏览器对CSS样式和JavaScript代码解释执行的一致性问题。随着Web标准的推进,浏览器之间的兼容性越来越好,但一些历史遗留...

    浏览器兼容性常见问题

    #### 一、注释标签的注意事项 在Web开发过程中,注释是非常重要的组成部分,它们帮助开发者更好地理解和维护代码。然而,在不同的浏览器环境中,注释标签的处理方式可能存在差异。 **1.1 注释的基本语法** HTML中...

    Asp.net和C#开发中的一些注意事项及小技巧

    在Asp.net与C#开发领域,掌握一系列的注意事项与小技巧对于提升代码质量、确保程序稳定性和增强用户体验至关重要。以下是从给定文件中提炼出的关键知识点,它们涵盖了从基本编码规范到高级优化策略,旨在帮助开发者...

    Javascript写入和读取txt文件

    #### 四、注意事项 1. **兼容性问题**:上述方法仅在Internet Explorer中可用,因为它们依赖于ActiveX对象。其他现代浏览器不支持ActiveX,因此这些方法无法跨浏览器使用。 2. **安全性考虑**:直接操作用户计算机...

    spring boot开发前后端注意事项

    在Spring Boot开发中,前后端交互是一个核心环节,涉及到多种数据传输格式和技术细节,本文将详细介绍在进行前后端交互时需要注意的事项,以及常见的数据传输方式和注解的使用。 首先,我们来讨论前后端交互中涉及...

    JavaScript简单的banner图片切换焦点图代码,兼容IE 6789 及其他主流浏览器

    JavaScript是一种广泛应用于网页和应用程序开发的脚本语言,它在前端开发中扮演着至关重要的角色。这个主题聚焦于一个常见的前端设计元素——Banner图片切换焦点图,它通常用于展示网站的特色内容或广告。该代码示例...

    一款强大的企业级Web开发工具,基于浏览器的IDE,Web开发者有福了。

    2. `readme.txt`:一般会提供关于软件的基本信息、安装指南、使用注意事项或常见问题解答。 3. `project`、`wb`、`source`和`misc`这些文件夹可能分别包含了项目示例、工作区设置、源代码文件和其他杂项资源。 综合...

    javascript获取当前页面可视高度和宽度及浏览器宽度和高度的函数.rar

    在JavaScript中,获取当前页面可视区域的尺寸以及浏览器窗口的尺寸是常见的需求,尤其是在进行网页布局、响应式设计或者滚动事件处理时。本压缩包文件"javascript获取当前页面可视高度和宽度及浏览器宽度和高度的...

    判断浏览器内核.zip

    4. **注意事项**:UserAgent字符串可以被用户修改,因此仅依赖它可能不够准确。此外,不同版本的浏览器可能会有细微变化,需要不断更新检测代码。 5. **实际应用**:识别浏览器内核有助于实现兼容性处理,例如为...

    浏览器全屏

    在本文中,我们将深入探讨浏览器全屏API、实现方法以及一些注意事项。 首先,浏览器全屏功能主要依赖于HTML5中的Fullscreen API。这个API为元素提供了进入和退出全屏模式的能力。全屏API包含以下核心方法: 1. `...

    web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开

    5. **注意事项**: - **用户体验**:避免过于频繁或强制地提示用户,以免引起反感。 - **兼容性测试**:确保在各种浏览器中都能正确显示和操作。 - **权限问题**:有些手机系统可能不允许应用直接打开新的浏览器...

    JavaScript从小白到入门图文教程.pdf

    ### 注意事项 - **变量声明**:`var`关键字声明的变量可能会无意中成为全局变量,使用`let`和`const`可以控制变量的作用域,避免全局污染。 - **数据类型转换**:在JavaScript中,非数字的字符串可以被转换为数字,...

    华视电子身份证读卡器 网页版开发包

    在进行开发前,应仔细阅读华视电子提供的开发文档,理解其API的使用方法和注意事项。 总结来说,开发华视电子身份证读卡器的网页版应用,不仅需要前端开发的基本技能,还需要对浏览器与硬件交互的机制有一定了解。...

    教学进度表-Javascript程序设计.docx

    JavaScript 程序设计教学进度表 本教学进度表涵盖了 JavaScript 程序设计的所有方面,从 JavaScript 的起源到 JavaScript 的高级应用,涵盖了 JavaScript 的基础知识、...* 总结 JavaScript 的应用场景和注意事项

    JavaScript 权威指南(第五版)

    9. **浏览器兼容性**:由于JavaScript的实现有多种,书中也会提及跨浏览器编程的注意事项和解决方案,帮助开发者应对不同环境的挑战。 10. **最佳实践和设计模式**:最后,书中会分享一些JavaScript编程的最佳实践...

    JavaScript开发积分兑换小程序项目源代码.zip

    "注意.txt"文件可能包含了一些开发注意事项或使用指南,比如项目依赖的库版本、环境配置、运行步骤等。开发者通常会在这种文本文件中提供重要的提醒,以避免在项目部署或运行时出现错误。 "upgrade.sql"文件则暗示...

    javascript技巧精心收集

    3. **web开发注意.txt**:文件可能列出了一些Web开发中的最佳实践和常见陷阱,比如跨浏览器兼容性问题、性能优化、安全注意事项等。 4. **javascript对象.txt**:JavaScript的核心是基于原型的对象模型,文件可能...

    C# 动态解析 javascript 脚本引擎源码

    而JavaScript则是Web开发中的主要脚本语言,它在浏览器环境中运行,为网页添加交互性。本主题涉及的是如何在C#中动态解析和执行JavaScript代码,这通常通过使用脚本引擎来实现。 一个常见的C#脚本引擎是Microsoft的...

Global site tag (gtag.js) - Google Analytics