当前位置:  开发笔记 > 编程语言 > 正文

在Javascript中优化函数

如何解决《在Javascript中优化函数》经验,为你挑选了1个好方法。

我是javascript的新手,但已设法编写一个有效的xml函数:)

我希望有人能给我一个如何优化功能的简要介绍.目前每个州的天气都有不同的功能,但我希望我能以某种方式简化这一过程.

代码粘贴在这里:http://pastie.org/private/ffuvwgbeenhyo07vqkkcsw

任何帮助是极大的赞赏.谢谢!

编辑:添加两个XML Feed的代码示例:

功能1(UV):http://pastie.org/private/jc9oxkexypn0cw5yaskiq

功能2(天气):http://pastie.org/private/pnckz4k4yabgvtdbsjvvrq



1> bobince..:
$(d).find('location#sydney')

值得怀疑.#sydney表示具有属性值的元素,该元素具有sydney模式类型ID.在HTML中,由于DOCTYPE ,该id="..."属性具有模式类型ID.但是这个XML文件没有DOCTYPE,因此它的id="..."属性没有模式类型ID.因此getElementById('sydney')不起作用,#sydney因为选择器不应该工作.

它在实践中起作用,因为当你使用find()jQuery时会回到它自己的'Sizzle'JavaScript选择器匹配器,它只是寻找id="..."属性,就像它是HTML一样.但是Sizzle很慢,你不应该依赖这个实现细节.location[id=sydney]对于XML文档,使用显式属性选择器更好.

var sydneyuv = sydneyuv += '' + uvindex + '' ;

你在这里有一个多余的任务.您使用扩充分配+=来添加内容sydneyuv,然后再将结果分配给sydneyuv.

此外,通常最好不要从输入值拼接HTML字符串.如果uvindex有HTML特殊字符怎么办?(它可能不会,但是没有什么可以阻止你从中包含它们的网站.)如果没有HTML转义,你就会有HTML注入和潜在的XSS安全漏洞.始终使用DOM样式的方法,比如jQuery text()attr()jQuery,或创建快捷方式:var $sydneyuv= $('', {text: uvindex});优先于字符串吊索.

我希望我能以某种方式简化这一点.

当然.使其数据驱动:

var towns= ['sydney', 'melbourne', 'brisbane', 'perth', 'adelaide', 'darwin'];
var uvlevels= [
    {uvlevel: 2,    risk: 'Low',         curcon: 'You can safely stay outdoors and use an SPF 15 moisturiser.'},
    {uvlevel: 5,    risk: 'Moderate',    curcon: 'Wear protective clothing outdoors and use an SPF 15 or SPF 30 moisturiser.'},
    {uvlevel: 7,    risk: 'High',        curcon: 'Wear protective clothing, limit your time outdoors and use an SPF 30 moisturiser.'},
    {uvlevel: 10,   risk: 'Very high',   curcon: 'Use caution, limit exposure to the sun and use an SPF 30 moisturiser.'},
    {uvlevel: 20,   risk: 'Extreme',     curcon: 'Use extreme caution, avoid exposure to the sun and use an SPF 30 moisturiser.'},
    {uvlevel: null, risk: 'Unavailable', curcon: 'Information is currently unavailable.'}
];

现在您可以用一个循环替换所有这些单独的语句:

$.each(towns, function() {
    var $location= $(d).find('location[id='+this+']');
    var uv= $location.find('index').text();
    var shorttown= this.slice(0, 3);
    $('#uv-'+shortttown).empty().append($('', {text: uv}));
    $.each(uvlevels, function() {
        if (this.uvlevel===null || uv<=this.uvlevel) {
            $('#risk-'+shorttown).text(this.risk);
            $('#curcon-'+shorttown).text(this.curcon);
            return false;
        }
    });
});

并且无论天气如何,大概都相似.

(我在HTML文档ID中使用完整的城镇ID,因此您不需要shorttown黑客攻击.)

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有