在FF和Opera下避免用elementNode.getAttribute获取图片和链接地址
如上例所示,如果图片和链接使用了相对地址,在FF和Opera下使用elementNode.getAttribute获取到的也将是相对地址,只有IE能获取到绝对地址,而用关联数组三者都能获取到绝对地址。 测试浏览器版本:IE(6.0)、FF(2.0)、Opera(9.6)
如上例所示,如果图片和链接使用了相对地址,在FF和Opera下使用elementNode.getAttribute获取到的也将是相对地址,只有IE能获取到绝对地址,而用关联数组三者都能获取到绝对地址。 测试浏览器版本:IE(6.0)、FF(2.0)、Opera(9.6)
网盟程序员日常的工作之一就是给站长投放代码,经常要使用Js从页面中获取一些信息(资源名称、下载地址、预览图片地址等)并将其发送到指定的接口中,在内容页中实现大都比较容易,通常比较难的是在列表页中实现,再加上一些CMS没有提供相关标签来调用或是有相关的标签但无法使用时更是难上难,如下边的一个列表: 在模板中预览图标签不是单指图片地址,而是一整个img内容,但如果下载到手机的链接和预览图地址相隔很近的话,用几个previousSibling或nextSibling还是可以很容易获取图片地址的,但这个例子中两者相隔实在有点远,试了几次都没取到图片地址:(最终就想:能不能写个函数,它能从指定的节点开始向上或向下查找特定节点的属性值?想了一晚,总算是实现了: 使用示例…
在Web开发中,JavaScript的一个很重要的作用就是对DOM进行操作,可你知道么?对DOM的操作是非常昂贵的,因为这会导致浏览器执行回流操作,而执行了过多的回流操作,你就会发现自己的网站变得越来越慢了,我们应该尽可能的减少DOM操作。本文是这个系列的最后一篇,给出了一些指导性原则,比如在什么时候应该对DOM可以进行什么样的操作等。 【原文】Nicholas C. Zakas - Speed up your JavaScript, Part 4 【译文】明达 - 如何提升JavaScript的运行速度(DOM篇) 以下是对原文的翻译: 在过去的几周中,我为大家介绍了几种可以加快JavaScript脚本运行速度的技术。第一节 介绍了如何优化循环。第二节 的重点放在优化函数内部代码上,还介绍了队列(queuing)和记忆化(memoization)两种技术,来减轻函数的工作负担。第三节 就如何将递归转换为迭代循环或者记忆化方式的话题,展开了讨论。第四节是这个系列的最后一篇,也就是本文,将重点阐述过多的DOM操作所带来的影响。…
影响JavaScript性能的另外一个杀手就是递归,在上一节中提到采用memoization技术可以优化计算数值的递归函数,但memoization不是万能的,不是所有的递归函数都可以用memoization技术优化,本文介绍了这些情况,并介绍了解决办法,就是将递归转换为迭代,同时需要注意,本文末尾介绍的方案不是最终的方案,还需要和上一节优化循环的方案综合起来才能达到最佳效果。 【原文】Speed up your JavaScript, Part 3 【作者】Nicholas C. Zakas 【译文】http://cuimingda.com/2009/02/speed-up-your-javascript-part-3.html…
这篇是Nicholas讨论如果防止脚本失控的第二篇,主要讨论了如何重构嵌套循环、递归,以及那些在函数内部同时执行很多子操作的函数。基本的思想和上一节chunk()那个例子一致,如果几个操作没有特定的执行顺序,而且互相不是依赖关系,我们就可以通过异步调用的方式加以执行,不止可以减少执行的次数,还可以防止脚本失控。本文还介绍了通过memoization技术取代递归的方法。 【原文标题】Speed up your JavaScript, Part 2 【原文作者】Nicholas C. Zakas 以下是对原文的翻译: 上周我在《too much happening in a loop》(译文)这篇文章中介绍了JavaScript运行时间过长的第一个原因。相似的情况有时也出现在函数的定义上,函数也可能因为使用不当而过载使用。通常情况是函数内包含了过多的循环(不是在循环中执行了过多的内容),太多的递归,或者只不过是太多不相干但又要一起执行的操作。…
根据Nicholas的说法,有四种代码会拖慢脚本的运行,并最终导致脚本失控。分别是次数过多的同步循环、庞大的函数体、不恰当的递归和不合理的DOM调用。这篇着重讲第一个原因。最后给出了一个开发模式,替换传统的循环结构,可以完全避免脚本失控的状况发生。 原文标题:Speed up your JavaScript, Part 1 原文作者:Nicholas C. Zakas 在我 上一篇帖子(译文)中,谈到了各个浏览器究竟会在什么情况下弹出脚本失控提示,对于Internet Explorer来说,当浏览器执行了数量过多的语句时就会停止执行脚本,而其他的浏览器,则是持续执行脚本超过一定时间的时候就会给出提示。而我们要探讨的核心问题,不是这些浏览器如何探测失控的脚本,而是我们如何才可以让脚本运行的更快一些,从而避免这些警告。…
在Web开发的时候,经常会遇到的一种情况就是浏览器提示脚本运行时间过长,停止还是继续,无论你选择什么,相信你都会想尽一切办法让这个对话框远离你的用户们。可你是否知道,这些不同的浏览器究竟是如何判断,哪些脚本处于“失控”状态么?本文作者,就从Internet Explorer、Firefox、Safari、Chrome和Opera五种浏览器,分析了这个情况出现的原因。 原文标题:What determines that a script is long-running? 原文作者:Nicholas C. Zakas 以下是对原文的翻译: Web开发者经常遇到并必须及时处理的问题就是“提示脚本运行时间过长的提示框”(或者称为“失控脚本提示”),这些令人讨厌的对话框会在你的脚本 执行时间过长的时候出现。对于Web开发者的基本准则就是,无论什么时候,都不要让用户看到这些对话框,因为这会给人一种代码缺乏结构化的印象,更简单的 说,你的代码负担太重了。…
本文是Rick Strahl在使用Javascript数组上的经验之谈,在一些细微的地方介绍了Javascript在处理数组上,相对于其他开发语言的不同之处,有些可能是我们自己想当然的事情,但实际上不是那么回事,呵呵。具体涉及到Javascript数组初始化、length、扩展属性等。 【原文】Javascript Array Fun 【作者】Rick Strahl 【译文】http://cuimingda.com/2009/01/javascript-array-fun.html 【译者】明达 以下是对原文的翻译: Josh在我之前的一篇帖子中留下了一条评论,指出在CSS property watcher component中存在一些小错误,这是一个jQuery插件,将CSS属性保存在数组中,并且跟踪这些值的变化,当发现CSS属性值发生变化时,会抛出一个事件,用户可以在事件中做出相应的处理。…
说明:目前三大主流浏览器中firefox和IE都支持onbeforeunload事件,opera尚未支持。 用法: ·object.onbeforeunload = handler · 描述: 事件触发的时候,如果handler有返回值将会弹出一个有确定和取消的对话框,确定则离开页面,取消则继续待在本页。handler的返回值将作为该对话框的显示文本。 触发于: ·关闭浏览器窗口; ·通过地址栏或收藏夹前往其他页面的时候; ·点击返回,前进,刷新,主页其中一个的时候; ·点击一个前往其他页面的url连接的时候; ·调用以下任意一个事件的时候:click,document write,document open,document close,window close,window navigate,window NavigateAndFind, location replace, location reload, form submit;…
在Javascript中,&&,||,=和,都属于运算符,既是运算符,那运算时就必须有值,下边我们通过一些实例来看看他们的值(很有意思): .在Javascript1.0和Javascript1.1中,如果左边的表达式的值为false,&&运算符返回false,而不是返回左边的表达式的未转换的值。 .在Javascript1.0和Javascript1.1中,如果左边的表达式的值为true,||运算符返回true,而不是返回左边的表达式的未转换的值。