我正在对需要从远程API提取并对页面的各个部分进行更改的页面进行更改。听起来像是抽出jQuery和Ajax的时候了,不是吗?相反,我只是使用了老式的JavaScript。实际上,我使用了新的JavaScript。

浏览器在图书馆和框架的出现中并没有停滞不前。因此,当我们需要额外烘烤时,我们可以利用这些功能。

一些JSONP

第一步是执行JSONP调用。这通常很简单:在页面中嵌入脚本标记。该脚本将运行您在页面上定义的功能。

var scr = document.createElement('script');
scr.src = 'http://openexchangerates.org/latest.json?callback=formatCurrency';
document.body.appendChild(scr);

当脚本运行时,它会将数据传递给formatCurrency函数。优秀。

一旦数据在函数中,我需要获取特定类型的所有元素并根据这些元素进行更改。

querySelectorAll

querySelectorAll方法将获取与特定选择器匹配的所有元素 - 类似于jQuery。它仅限于浏览器理解的选择器,这肯定比jQuery可以做的要少。有时用凿子代替大锤。

querySelectorAll方法也适用于IE8及以及所有其他流行的浏览器。我还包装了我的整个代码块,以便在执行任何操作之前检查浏览器是否支持此方法。

if (document.querySelectorAll) {
function formatCurrency (data) { var els = document.querySelectorAll('.price');
/* do stuff with the elements */
} var scr = document.createElement('script');
scr.src = 'http://openexchangerates.org/latest.json?callback=formatCurrency';
document.body.appendChild(scr);
}

正如您在示例中所看到的,我正在寻找的是具有一类价格的每个元素。我可以使用,getElementsByClassName但在IE8中不支持,而是querySelectorAll。到现在为止还挺好。

在那之后,只需要获取属性,进行一些更改,然后使用innerHTML将其重新插入到DOM中。十分简单。

渐进式增强

但是那些不支持这种新功能的用户呢?它与那些不支持JavaScript的人一样。就我而言,这意味着用户只会看到加拿大的定价而不是将其转换为本地货币。

这是完整的最终脚本。

if (document.querySelectorAll) {
var currencyLookup = {
EUR:'€', USD:'US$', CAD:'CDN$'
}
function formatCurrency (data) {
// format germany price
var els = document.querySelectorAll('.price');
for (var i=0; i<els.length; i++) {
var price = parseInt(els[i].innerHTML.replace(/[^0-9]*/,''));
var curr = els[i].getAttribute('data-currency');
var newPrice = price / data.rates.CAD * data.rates[curr];
els[i].innerHTML = '<small>' + currencyLookup[curr] + '</small>' + Math.round(newPrice);
}
} var scr = document.createElement('script');
scr.src = 'http://openexchangerates.org/latest.json?callback=formatCurrency';
document.body.appendChild(scr);
}

这总共是628个字节。不需要JavaScript库或框架。这可以缩小到469个字节。与只需要在页面上获取jQuery所需的91,000字节相差甚远。

Takes it Easy

“只使用jQuery”可能是首选词,但幸运的是,你并不总是需要那么多代码来解决一个简单的问题。页面越来越大。很高兴知道我们并不总是需要使用大量资源来实现一个小目标。

最新文章

  1. CSS篇
  2. 搭建一个简单的Struts2(Struts2_HelloWorld)
  3. null 和 NULL 判断
  4. spark textFile 困惑与解释
  5. 分享JS代码(转)
  6. How to Iterate Map
  7. [Jquery]焦点图轮播效果
  8. LR_问题_平均响应时间解释,summary与analysis不一致
  9. GitHub的代码托管和使用方法
  10. JVM Monitoring: JMX or SNMP?
  11. 如何配置visual studio 2013进行负载测试-万事开头难
  12. delphi对ini文件的操作(转载 万一)
  13. 在Eclipse中运行hadoop程序
  14. JNI 可变印刷
  15. 关于grub的那些事(二)
  16. js 技巧
  17. PHP的抽象类、接口类的区别和选择【转载】
  18. hh monitor
  19. dedecms mysql连接错误:#1040 - Too many connections
  20. Flutter 初尝:从 Java 无缝过渡

热门文章

  1. SQL Server CASE语句中关于Null的处理
  2. Hadoop平台配置汇总
  3. centos6.8服务器配置之vsftpd配置
  4. [Functional Programming Monad] Combine Stateful Computations Using Composition
  5. XUtils3框架的初始体验(一)
  6. js文件加载执行顺序
  7. 超棒的JS移动设备滑动内容幻灯实现 - Swiper
  8. CSS3文本溢出
  9. 3、jQuery的DOM基础
  10. Eclipse Debug 使用