在js中获取页面元素的属性值时,弱类型导致的诡异事件踩坑记录,

前几天写一个js的时候遇到一个非常诡异的事情,这个问题是这样的,我要获取一个页面的DOM元素的val值,判断这个值是否比某个变量大,这个需求原先数字最大也就是10,现在要改了,可能会更多,这个时候我发现比较大小的判断就出了问题:

代码粘出来:

 1 // js弱类型导致的诡异现象,11 > 9  false
 2   function downtest(id){// 现象是当val取到的元素val值是11的时候,11>9结果是false
 3     // 当前点击下一题的是第几题,
 4     var val=$("#"+id).attr("val");
 5     var valint = parseInt(val);// 如果不把这个变量手动转成数字,当val大于等于10的时候(小于10的时候当做是数字)js就会把它作为一个字符串处理,弱类型语言导致的
 6     // 如果当前这个题号比已答题数大的话,就让已答数量变成当前题号
 7     console.log(‘valint: ‘+valint+‘num: ‘+num+(valint>num));
 8     console.log(valint+num);
 9     if (valint>num) {
10         document.getElementById("numbers").innerText=valint;
11         num=valint;
12     }else{
13         document.getElementById("numbers").innerText=num;
14     }
15     var div = $("#"+id);
16     var n = div.next(); //后一个兄弟
17     div.hide();
18     n.show();
19     a++
20 }

当获取到的这个值为11的时候(第四行),被比较的变量是9,按理说11>9的结果应该是true吧,但是打印出来的log显示是false.....我后来查了查资料,自己总结一下,发现如果当获取到的属性值超过或等于10,js就会把这个变量视为字符串处理,而不是在比较时作为数字,

解决的办法就是手动转换为数字(第五行),这个时候再打印出来就是正确的数字对比结果了,比较小的一个小坑吧,记录一下

原文地址:https://www.cnblogs.com/zizaiwuyou/p/10538157.html

时间: 2024-10-25 17:52:25

在js中获取页面元素的属性值时,弱类型导致的诡异事件踩坑记录,的相关文章

js中获取页面元素节点的几种方式

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title></title> <!-- 使ie以IE8的模式运行 --> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" > <scr

jQuery 获取页面元素的属性值

获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 : $(window).width(); 获取页面的文档高度 $(document).height(); 获取页面的文档宽度 : $(document).width(); 浏览器当前窗口文档body的高度: $(document.body).height(); 浏览器当前窗口文档body的宽度: $(document.body).width(); 获取滚动条到顶部的垂直高度 (

JS中获取 DOM 元素的绝对位置实例详解

在操作页面滚动和动画时经常会获取 DOM 元素的绝对位置,例如 本文 左侧的悬浮导航,当页面滚动到它以前会正常地渲染到文档流中,当页面滚动超过了它的位置,就会始终悬浮在左侧. 本文会详述各种获取 DOM 元素绝对位置 的方法以及对应的兼容性.关于如何获取 DOM 元素高度和滚动高度,请参考视口的宽高与滚动高度 一文. 概述 这些是本文涉及的 API 对应的文档和标准,供查阅: API 用途 文档 标准 offsetTop 相对定位容器的位置 MDN CSSOM View Module clien

js中获取DOM元素

通过ID获取(getElementById)通过name属性(getElementsByName)通过标签名(getElementsByTagName)通过类名(getElementsByClassName)通过选择器获取一个元素(querySelector)通过选择器获取一组元素(querySelectorAll)获取html的方法(document.documentElement) document.documentElement是专门获取html这个标签的获取body的方法(documen

JS中获取页面单选框radio和复选框checkbox中当前选中的值

单选框:单选框的name值全部相同 页面有一组单选框的元素<td><input type="radio name="radioid">满意</td>  <td><input type="radio" name="radioid">基本满意</td> var radio=document.getElementsByName("radio"); va

关于JS中获取浏览器高度和宽度值的多种方法(多浏览器)

三种浏览器获取值方法 IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象高度 document.documentElement.clientWidth ==> 可见区域宽度 document.documentElement.clientHeight ==> 可见区域高度 FireFox中: document.body.clientWidth ==> BODY对象宽度

Js中获取对象的所有key值

假如现在有一个对象 var obj = { A:2 ,B:"Ray" ,C:true ,D:function(){} } 如果想遍历对象obj中的所有键值,一般是用以下方式 for(var key in obj){ console.log(key,obj[key]) } 输出: A 2 B Ray C true D function (){} 如果只是想获取所有的key值,用上面的方法也行得通. 但有更简单的方式:Object.keys(...),返回值是包含key的数组 如 cons

js中改变不同的div属性值的操作

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

获取当前元素的属性值

1. 简单示例 ... deleteIP(e) { // 使用 e.target.getAttribute 来取值 this.state.whitelist.splice(e.target.getAttribute("data"), 1); this.setState({'whitelist': this.state.whitelist}); }, ... // 使用data来传值 <Button data={item} onClick={this.deleteIP}>删