具有某些类的元素的getAttribute;不起作用
getAttribute of elements with some class doesn't work
我有一些带有特定类的输入字段。它们都有一个数据属性,比如具有整数值的data-somedata
。我必须计算这些数据属性的总和。我尝试将getAttribute
与getElementsByClassName
结合使用,但这不起作用。
我使用的是这个代码:
<input class="datainput" value="The 1st input" type="text" data-somedata="8"/>
<input class="datainput" value="The 2nd input" type="text" data-somedata="15"/>
<div id="result"></div>
var fields = document.getElementsByClassName('datainput');
var result = 0;
for (var i in fields) {
result += fields[i].getAttribute('data-somedata');
}
document.getElementById('result').innerHTML = 'The sum is: ' + result;
在jsFiddle 上实时观看
在(firefox)控制台中,我得到:
TypeError:
fields[i].getAttribute
不是函数
为什么会这样?我该怎么修?
除非绝对必要,否则我不想使用jQuery(我不认为是这样)。
不要使用for-in语句,而是使用一个简单的for语句,如:
var fields = document.getElementsByClassName('datainput');
var result = 0;
for (var i = 0; i < fields.length; i ++) {
var val = parseInt(fields[i].getAttribute('data-somedata'), 10);
result += val;
}
document.getElementById('result').innerHTML = 'The sum is: ' + result;
此外,getAttribute
的结果是字符串,在执行加法操作之前,必须使用parseInt()
将其强制转换为整数。否则,将执行字符串串联,使您的结果:
总和为:0815
更新的Fiddle
for in语句不起作用的原因是for in迭代目标对象的属性,在您的情况下是HTMLCollection
(getElementsByClassName
的结果)。事实上,您可以使用以下丑陋的片段使其与for一起工作:
var c = 0;
for(var i in fields) {
if(c == fields.length) break;
c ++;
console.log(fields[i].getAttribute('data-somedata'));
}
HTMLCollection
的第一个n=fields.length属性是其项的索引。
检查此项:
var fields = document.getElementsByClassName('datainput');
var result = 0;
for (var i = 0; i < fields.length; i++) {
result += parseInt(fields[i].getAttribute('data-somedata'));
}
document.getElementById('result').innerHTML = 'The sum is: ' + result;
在jsfiddle 上
至于原因,for in循环将在对象的所有属性上循环,包括函数(和继承的属性)。
<!DOCTYPE html>
<html>
<body>
<h1>HTML DOM Attributes</h1>
<h2>The value Property</h2>
<p>The value property returns the value of an attribute:</p>
<ins class="demo" data-ad-slot="ciao"></ins>
<ins id="demob"></ins>
<script>
const element = document.getElementsByClassName('demo')[0];
let value = element.attributes["data-ad-slot"].value;
document.getElementById("demob").innerHTML = value;
</script>
</body>
</html>
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 在函数中添加数组元素的数值
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 将视口底部滚动到元素底部
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何使用jquery处理php循环通过元素
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- JS get元素之间的差异's属性与elem.getAttribute(attr)和elem[attr]
- 具有某些类的元素的getAttribute;不起作用
- Internet Explorer 7元素中的错误.getAttribute方法
- 在javascript中检索点击元素的getAttribute