经常我们可以看到很多网站会有多个相同功能的模块,比如淘宝首页的轮播,比如新浪首页的tab切换;

那么可以看出这些地方在HTML结构上是类似的,所以我们可以考虑用一块功能代码去实现,而不同是仅仅是传递参数的不同;

例如:

  1 <!DOCTYPE HTML>
  2 <html>
  3 <head>
  4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5 <title>J函数传参——商品价格计算</title>
  6 </head>
  7
  8 <body>
  9 <ul id="list">
 10     <li>
 11       <input type="button" value="-" />
 12     <strong>0</strong>
 13       <input type="button" value="+" />
 14     单价:<em>12.5元</em>
 15     小计:<span>0元</span>
 16   </li>
 17     <li>
 18       <input type="button" value="-" />
 19     <strong>0</strong>
 20       <input type="button" value="+" />
 21     单价:<em>10.5元</em>
 22     小计:<span>0元</span>
 23   </li>
 24     <li>
 25       <input type="button" value="-" />
 26     <strong>0</strong>
 27       <input type="button" value="+" />
 28     单价:<em>8.5元</em>
 29     小计:<span>0元</span>
 30   </li>
 31     <li>
 32       <input type="button" value="-" />
 33     <strong>0</strong>
 34       <input type="button" value="+" />
 35     单价:<em>8元</em>
 36     小计:<span>0元</span>
 37   </li>
 38     <li>
 39       <input type="button" value="-" />
 40     <strong>0</strong>
 41       <input type="button" value="+" />
 42     单价:<em>14.5元</em>
 43     小计:<span>0元</span>
 44   </li>
 45 </ul>
 46
 47 <p>
 48 商品合计共:<div id='cou'>0件</div>,共花费了:0元<br />
 49 其中最贵的商品单价是:0元
 50 </p>
 51
 52
 53 <script>
 54     var oUl = document.getElementById('list');
 55     var aLi = oUl.getElementsByTagName('li');
 56
 57
 58     // fn1(aLi[0]);
 59     // fn1(aLi[1]);
 60     // fn1(aLi[2]);
 61     // fn1(aLi[3]);  看到这种情形,应该想到使用for循环来实现
 62     for(var i=0; i<aLi.length; i++){
 63         fn1(aLi[i]);
 64     }
 65
 66     function fn1(oLi){ //这里面使用,或者用其他参数a,b,c都可以,这个参数是自己命名的
 67
 68         var aBtn = oLi.getElementsByTagName('input'); // 因为这里面有2个input,所以使用了aBtn,且后面没有加上相应的下标值;
 69         var oStrong = oLi.getElementsByTagName('strong')[0];
 70         var oSpan = oLi.getElementsByTagName('span')[0];
 71         var oEm = oLi.getElementsByTagName('em')[0]; // 这里面加上[0];是基于该父级元素下,只有这一个em标签
 72         var n1 = Number(oStrong.innerHTML); // "这里需要注意的是从HTML中获取的值都是字符串类型,为了后面的运算,以及避免产生不必要的问题,这里进行显示类型转换"
 73         var n2 = parseFloat(oEm.innerHTML);
 74
 75         aBtn[0].onclick = function(){
 76             n1--;
 77             if(n1<=0){
 78                 n1=0;
 79             }
 80             oStrong.innerHTML = n1;
 81             oSpan.innerHTML = n1*n2+"元";
 82         };
 83         aBtn[1].onclick = function(){
 84             n1++;
 85             oStrong.innerHTML = n1;
 86             oSpan.innerHTML = n1*n2+"元";
 87         };
 88     }
 89
 90 // 下面是比较规范的命名:
 91 //     var oUl = document.getElementById('list');
 92 //     var aLi = oUl.getElementsByTagName('li');
 93
 94 //     // fnCount ( aLi[0] );
 95 //     for ( var i=0; i<aLi.length; i++ ) { 96 //         fnCount ( aLi[i] );
 97 //     }
 98
 99 //     function fnCount ( li ) {  // 注意看这里的函数名命名
100 //         var aBtn = li.getElementsByTagName ('input');
101 //         var oStrong = li.getElementsByTagName ('strong')[0];
102 //         var oEm = li.getElementsByTagName ('em')[0];
103 //         var oSpan = li.getElementsByTagName ('span')[0];
104 //         var n = oStrong.innerHTML;            // 产品的数量
105 //         var price = parseFloat(oEm.innerHTML);            // 产品的单价命名
106
107 //         aBtn[0].onclick = function () {108 //             if ( n > 0 ) {109 //                 n--;
110 //             }
111 //             oStrong.innerHTML = n;
112 //             oSpan.innerHTML = n*price + '元';
113 //         };
114 //         aBtn[1].onclick = function () {115 //             n++;
116 //             oStrong.innerHTML = n;
117 //             oSpan.innerHTML = n*price + '元';
118 //         };
119 //     }
120 // };
121
122 </script>
123
124 </body>
125 </html>

View Code

今天这段自己敲的代码有2个收获:

第一:弄清除,参数的命名是自定的,也就是说这里面的oLi,也可以是其他自己起的名字,比如a,b,c都可以;

第二:动态获取元素的ByTagName方法,其实后面是否使用到下标,就看该HTML机构中,是否有多个相同的元素,比如这里面的按钮,就有2个,所以aBtn,a代表数组,不止一个,后面没有使用下标;

var aBtn = a.getElementsByTagName('input');

而其他该结构中只有一个的HTML元素,这里我们要调用它则直接使用下标了,比如这里的

var oStrong = a.getElementsByTagName('strong')[0];
var oSpan = a.getElementsByTagName('span')[0];
var oEm = a.getElementsByTagName('em')[0];

都是这种情况

转载于:https://www.cnblogs.com/zhangxg/p/4557526.html

函数传参之商品价格计算—JS学习笔记2015-6-6(第50天)相关推荐

  1. 函数传参和实际应用—JS学习笔记2015-6-5(第49天)

    函数传递参数 参数=JS的数据类型=>数字.字符串.布尔.函数.对象.未定义 传递有名字的函数,直接传递函数名就可以了. fn1(100, 'px'); function fn1(a, b){/ ...

  2. JS学习笔记——入门基础知识总结

    JS入门基础知识总结1 前言 基础背景知识 一.产生历史: 二.特点: 三.应用方向: 四.Javascript组成: JavaScript书写使用方式 一.行内式(了解即可,项目中不使用,日常练习尽 ...

  3. JS一起学05:Date对象、封闭空间、函数传参和封装、获取非行间样式、字符串操作

    一.Date对象 1. 获取 oDate.getFullYear() 获取年份 oDate.getMonth()+1  获取月份 0-11----->1-12 oDate.getDate() 获 ...

  4. JS一起学02:函数传参、操作属性第二种方式、提取行间事件、循环、this、焦点问题、联动选择、选项卡焦点图

    一.函数传参     1.函数传参:参数就是占位符----函数里定不下来的东西 var a1=function(){ alert(123); }; function a(f){ // 相当于 f=a1 ...

  5. JS函数传参时:值传递与引用传递的区别

    JS函数传参时:值传递与引用传递的区别 一.先分析基础数据与复杂数据的区别 : 基本数据类型:Undefined.Null.Boolean.Number.String 引用数据类型:对象 如:var ...

  6. 论JS函数传参时:值传递与引用传递的区别

    JS函数传参时:值传递与引用传递的区别? 值传递:值传递的数据为基本数据类型,基本数据类型在内存中存放的是数值本身:值传递为单向传递,只能由实参传递给形参. 引用传递:引用传递的数据为复杂数据类型,复 ...

  7. 『Python × C++』函数传参机制学习以及对比

    一.Python函数传参 在python中,函数传参实际上传入的是变量的别名,由于python内在的变量机制(名称和变量值相互独立),只要传入的变量不可变(tuple中的元素也要是不可变的才行),那么 ...

  8. python学习-高阶函数(函数传参、返回函数(闭包)、匿名函数lambda)

    文章目录 高阶函数 函数传参 返回函数(闭包) 匿名函数lambda 高阶函数 定义: 至少满足下列一个条件: 接受一个或多个函数作为输入 输出一个函数 python里的高阶函数有 filter.ma ...

  9. python函数参数传递机制_Python 学习笔记(一) 理解Python的函数传参机制

    对于刚接触Python不久的新手,Python的函数传参机制往往会让人迷惑.学过C的同学都知道函数参数可以传值或者传地址.比如下面这段代码 点击(此处)折叠或打开 void func(int inpu ...

最新文章

  1. IT项目管理课程培训
  2. CentOS中安装git
  3. richedit line insertion error什么意思_大连 LINE 是怎样的一个公司?
  4. React开发(153):ant design自定义列
  5. OpenShift - 部署基于MongoDB和NodeJS的多层应用
  6. Apache Server 修复两个高危缺陷
  7. linux系统rootkit恶意软件安全检测工具rkhunter安装部署、使用详解
  8. iOS开发之仿照LinkedIn登录界面效果
  9. 程序员必备75道逻辑思维题(附答案)之五
  10. 【JSON】JSON入门详解(一)
  11. MySQL-python安装遇到的各种问题
  12. 使用C大调编排一首歌曲
  13. 磁盘存储DiskStore
  14. linux oracle 失败怎么办,Linux开机报错unable to load selinux policy怎么办?
  15. 鼠标滑过,二级菜单显示
  16. 诺基亚C2-03 - 简单应优先处理的诺基亚C2-03
  17. java毕业设计奥利给共享自习室系统(附源码、数据库)
  18. 最新悬赏猫任务接单发布系统APP三端源码 附带视频详细搭建教程
  19. 使用ps优化图片,减少图片内存大小
  20. uniApp使用GoogleMap规划多个目的地路线

热门文章

  1. 【HDU - 1272】小希的迷宫 (并查集判环)
  2. 1.4)深度学习笔记------深层神经网络
  3. opencv 滤镜效果php,OpenCV实现马赛克和毛玻璃滤镜效果
  4. leetcode25. K 个一组翻转链表
  5. Makefile编写详解--项目开发
  6. MachineLearning(7)-决策树基础+sklearn.DecisionTreeClassifier简单实践
  7. SQL字符串中单引号与换行符的转义
  8. 多线程原理实例应用详解
  9. 程序型语言VS.编译型语言
  10. 专访谷歌CEO:像对待家人一样对待员工