Javascript jQuery遍历元素
我有下面的HTMLJavascript jQuery遍历元素,javascript,jquery,html,Javascript,Jquery,Html,我有下面的HTML <div id="price_list"> <input type="text" value="100" class="input_price" /> <input type="text" value="256" class="input_price" /> <input type="text" value="500" class="input_price" /> <input type="text" value=
<div id="price_list">
<input type="text" value="100" class="input_price" />
<input type="text" value="256" class="input_price" />
<input type="text" value="500" class="input_price" />
<input type="text" value="04.26" class="input_price" />
<input type="text" value="156" class="input_price" />
<input type="text" value="052" class="input_price" />
<input type="text" value="692" class="input_price" />
<input type="text" value="25.36" class="input_price" />
<input type="text" value="10.56" class="input_price" />
</div>
在jQuery中,您可以直接执行以下操作:
var sum = 0;
$('.input_price').each(function(){
var value = parseFloat(this.value);
if(!isNaN(value)) sum += value;
});
你也可以。这将需要更长的时间,但不会冻结UI线程,因此您不会被卡住。在这里,它将1的数组相加到1000,但不会冻结浏览器
function loop(object,callback){
var i = 0;
var sum = 0;
var timer = setInterval(function(){
//get value and add
var value = parseFloat(object[i].value);
if(!isNaN(value)) sum += value;
//if we reach the length, clear the timer and call the callback
if(++i === object.length){
clearInterval(timer);
callback(sum);
}
},0);
}
loop($('.input_price'),function(sum){
console.log(sum);
});
只因为您关心性能,所以请使用纯JavaScript和单个
for
循环:
var list = document.getElementById("price_list"),
inputs = list.getElementsByTagName("input"),
total = 0;
for (var i = 0, len = inputs.length; i < len; i++) {
total += +inputs[i].value;
}
console.log(total);
var list=document.getElementById(“价格列表”),
inputs=list.getElementsByTagName(“输入”),
总数=0;
对于(变量i=0,len=inputs.length;i
以类作为输入值对所有元素求和
var elements = document.getElementsByClassName("input_price");
var sum = 0;
for(var i=0; i<elements.length; i++) {
sum += parseFloat(elements[i].value);
}
var elements=document.getElementsByClassName(“输入价格”);
var总和=0;
对于(var i=0;i您应该发布如何使用each
。向我们展示您尝试使用的代码可能是个好主意。each(),也许有人可以改进它。@pXL谢谢,添加到问题中。这是在page@ArunPJohny好的,是的。但是在不同的项目中。+1-思维良好,打字速度快,比我快了半分钟。@Red如果你想获得表演,那是最好的方法。@VisioN bee下面有一个较短的方法。你不认为这样更好吗呃。@optim没有。我的意思是既没有使用getElementsByClassName
,也没有使用querySelectorAll
,因为这些方法都不受旧浏览器的支持。@optim所有优秀的开发人员都应该担心。而且,我的方法在Chrome中速度更快。这在复杂的迭代中会失败。为什么。你能解释一下吗?我真的不知道性能在大型元素集上,最好使用纯javascript。var sum=parseFloat(0);
Eh?为什么?
var list = document.getElementById("price_list"),
inputs = list.getElementsByTagName("input"),
total = 0;
for (var i = 0, len = inputs.length; i < len; i++) {
total += +inputs[i].value;
}
console.log(total);
$('.input_price').each(function(){
sum += parseFloat($(this).val());
});
var elements = document.getElementsByClassName("input_price");
var sum = 0;
for(var i=0; i<elements.length; i++) {
sum += parseFloat(elements[i].value);
}