JavaScript小项目之BMI值计算

项目题目:
实现BMI值计算器


项目作用:
复习JavaScript课程知识,学习DOM基础知识,熟悉document对象的使用,实现简单的BMI计算器页面。


前言

通过前期javascrip理论基础部分(ECMAScript)的学习,我们了解掌握了JS的基本语法,包括:变量、数据类型、流程控制、数组、函数以及对象,接下来我们通过学习DOM的基础知识完成简单的交互式页面的实现。


提示:以下是本篇文章正文内容,下面案例可供参

一、DOM是什么?

DOM:Document Object Model,文档对象模型。
作用:是一套规范文档内容的通用型标准。

二、基础内容介绍

1. DOM HTML节点树

DOM HTML指的是DOM中为操作HTML文档提供的属性和方法。
文档(Document)表示HTML文件。
文档中的标签称为元素(Element)。
文档中的所有内容称为节点(Node)。
因此,一个HTML文件可以看作是所有元素组成的一个节点树,各元素节点之间有级别的划分 。
节点树
通过上述节点树结构图知:
根节点:标签是整个文档的根节点,有且仅有一个。
子节点:指的是某一个节点的下级节点。
父节点:指的是某一个节点的上级节点。
兄弟节点:两个节点同属于一个父节点。

2. DOM 的查找方法

document对象提供了一些用于查找元素的方法,利用这些方法可恶意根据元素的id、name和class属性以及标签名称的方式获取操作的元素,方法如下:

document.getElementById()     返回对拥有指定id的第一个对象的引用
document.getElementsByName()     返回带有指定名称的对象集合
document.getElementsByTagName()     返回带有指定标签名的对象集合
document.getElementsByClassName()     返回带有指定类名的对象集合(不支持IE6~8)

  • 除了document.getElementById()方法返回的是拥有指定id的元素外,其他方法返回的都是符合要求的一个集合。若要获取其中一个对象,可以通过下标的方式获取,默认从0开始;
  • 通过document对象的方法与document对象的属性获取的操作元素表示的都是同一对象。如document.getElementsByTagName(‘body’)[0]与document.body全等。

3. 元素内容获取

JavaScript中,若要对获取的元素内容进行操作,则可以利用DOM提供的属性和方法实现。

innerHTML     设置或返回元素开始和结束标签之间的
HTML innerText     设置或返回元素中去除所有标签的内容
textContent     设置或者返回指定节点的文本内容
document.write()     向文档写入指定的内容
document.writeln()     向文档写入指定的内容后并换行

  • 属性属于Element对象,方法属于document对象。
  • innerHTML在使用时会保持编写的格式以及标签样式。
  • innerText则是去掉所有格式以及标签的纯文本内容。
  • textContent属性在去掉标签后会保留文本格式。

innerText属性在使用时可能会出现浏览器兼容的问题。因此,推荐在开发时尽可能的使用innerHTML获取或设置元素的文本内容。同时,innerHTML属性和document.write()方法在设置内容时有一定的区别,前者作用于指定的元素,后者则是重构整个HTML文档页面。

4. 节点获取

由于HTML文档可以看做是一个节点树,因此,可以利用操作节点的方式操作HTML中的元素。

firstChild       访问当前节点的首个子节点
lastChild       访问当前节点的最后一个子节点
nodeName     访问当前节点名称
nodeValue     访问当前节点的值
nextSibiling     返回同一树层级中指定节点之后紧跟的节点
previousSibling    返回同一树层级中指定节点的前一个节点
parentNode     访问当前元素节点的父节点
childNodes     访问当前元素节点的所有子节点的集合

此外,由于document对象继承自Node节点对象,因此document对象也可以进行以上的节点操作。

// 假设document中的第1个子节点是html
document.firstChild === document.documentElement; // 比较结果:true
// 假设html中的最后1个子节点是body
document.firstChild.lastChild === document.body;   	    // 比较结果:true

三、项目实施内容

1. 参考代码

1.1 BMI计算器实现

NOTE: HTML、CSS部分代码素材见下文附件部分;此处仅展示JS部分代码。

代码如下(示例):

 window.onload = function(){//页面加载时执行以下代码
	var cal = document.getElementById("cal");   //获取指定id的元素
	var show = document.getElementById("show");
	cal.onclick = function(){  //在点击计算按钮时执行以下代码
		var height = parseFloat(document.getElementById("height").value) / 100;   //获取指定id的元素即身高,并强制转换为数值类型,单位为米
		var weight = parseFloat(document.getElementById("weight").value); //获取指定id的元素即体重,并强制转换为数值类型
		var bmi = weight / (height * height);  //求bmi胡值
		var str = "朋友,您的身高是:<b>"+height+"m<b/>,您的体重是:<b>"+weight+"kg<b/>,您的BMI指数是:<b>"+bmi.toFixed(2)+"。<b/>"; //显示所需在字符
		if(isNaN(height) || isNaN(weight) || weight <= 0 || height <= 0) //isNaN()判断是否为数值类型,同时需满足都不小于0
			str = "朋友您的输入有误,请重新输入!";
		else if(bmi < 18.5)
			str += "偏瘦!";
		else if(bmi < 24)
			str += "正常!";
		else if(bmi < 28)
			str += "偏胖!";
		else
			str += "过度肥胖!";
		show.innerHTML = str;  //返回str的内容,并进行显示
	}
}

效果:在这里插入图片描述


2. 学生成果展

1.1 软件2005班

代码如下(示例1):@软件2005-张承宸

<script>
	const cm = document.getElementById("CM");
	const kg = document.getElementById("KG");
	const btn = document.getElementById("btn");
	const taxt = document.getElementById("taxt");
	btn.onclick=function (){
		if (isNaN(cm.value || kg.value)){
			taxt.innerText=("输入错误,请输入数字")
		}
		const bmi = kg.value / cm.value / cm.value * 10000;
		if (bmi>0 && bmi <= 18.5){
			taxt.innerText=("偏瘦")
		}
		if (18.5< bmi&& bmi <=23.9){
			taxt.innerText=("正常")
		}
		if (23.9 < bmi && bmi <27.9){
			taxt.innerText=("过重")
		}
		if (27.9 <bmi){
			taxt.innerText=("肥胖")
		}
	}
</script>

1.2 软件2006班

代码如下(示例1):@软件2006-李永恒

window.onload = function() {
	// var xianshi = document.getElementsByTagName("div")[11];
	var xianshi = document.getElementById("show");
	document.getElementsByClassName("row")[2].onclick = function() {
		sg = parseInt(document.getElementsByTagName("input")[0].value) / 100
		tz = parseInt(document.getElementsByTagName("input")[1].value)
		var bmi = tz / (sg * sg)
		bmi = bmi.toFixed(1)
		console.log(bmi)
		if (bmi <= 18.5) {
			qk = "偏瘦"
		} else if (bmi > 18.5 && bmi <= 23.9) {
			qk = "正常"
		} else if (bmi <= 27.9 && bmi >= 24.0) {
			qk = "过重"
		} else {
			qk = "肥胖"
		}
		xianshi.innerHTML = "你的身高是" + sg + "M,体重是" + tz + "kg,BMI值为" + bmi + "为(" + qk + ")"
	}

}

总结

通过本次小项目,复习JavaScript课程知识,学习DOM基础知识,熟悉document对象的使用,实现简单的BMI计算器页面的实现。

附件

1、BMI计算HTML、CSS部分素材
2、学生源代码展示

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Vue.js 是一个用于构建用户界面的 JavaScript 框架,它并不直接处理计算逻辑,但可以用于渲染和展示计算结果。计算BMI和判断是否健康可以通过编写 JavaScript 代码来实现。 以下是一个简单的示例,展示如何使用 Vue.js 计算BMI并判断是否健康: ```html <!DOCTYPE html> <html> <head> <title>BMI计算器</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="app"> <h2>BMI计算器</h2> <label for="weight">体重(kg):</label> <input type="number" v-model="weight"> <label for="height">身高(cm):</label> <input type="number" v-model="height"> <button @click="calculateBMI">计算</button> <div v-if="bmi !== null"> <p>您的BMI为:{{ bmi }}</p> <p>您的健康状况为:{{ healthStatus }}</p> </div> </div> <script> new Vue({ el: "#app", data: { weight: null, height: null, bmi: null, healthStatus: null }, methods: { calculateBMI() { if (this.weight && this.height) { const heightInMeters = this.height / 100; this.bmi = (this.weight / (heightInMeters * heightInMeters)).toFixed(2); if (this.bmi < 18.5) { this.healthStatus = "偏瘦"; } else if (this.bmi >= 18.5 && this.bmi < 24) { this.healthStatus = "正常"; } else if (this.bmi >= 24 && this.bmi < 28) { this.healthStatus = "超重"; } else if (this.bmi >= 28) { this.healthStatus = "肥胖"; } } } } }); </script> </body> </html> ``` 在这个示例中,我们使用 Vue.js 构建一个简单的BMI计算器。用户可以输入体重和身高,点击计算按钮后,会根据输入的计算BMI,并根据BMI判断健康状况。 请注意,这只是一个简单的示例,仅用于展示如何使用 Vue.js 来计算BMI和判断健康状况。实际应用中,可能需要更复杂的逻辑和验证。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wcyd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值