Jquery 用于每个输入元素,但焦点除外



我可以使用哪个选择器来遍历页面上除当前焦点元素之外的所有输入元素?

这是我目前拥有的:

total = 0.00;
$(".numbers").each(function() {
total += parseFloat($(this).val());
});
<input type="number" class="numbers" />

我不喜欢在循环本身之外初始化变量,所以我个人建议.toArray().reduce()

$("input:first").focus();   //for demo only
var total = $(".numbers:not(:focus)").toArray().reduce((sum, element) => sum + Number(element.value),0);
console.log(total);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="numbers" value="5" />
<input type="text" class="numbers" value="2" />
<input type="text" class="numbers" value="12" />

$(".numbers:not(':focus')").each(function(){
total += parseFloat($(this).val());
});
$('.numbers:not(:focus)').each(function(){
})
$(".numbers:not(':focus')").each(function(index,element){
total += parseFloat($(element).val());
});

我更喜欢这种方式:

$.each($('.number').not(':focus'), function(idx, ele) {
total += parseFloat(ele.value);
});

使用:not(:focus)是您要查找的反选择。 您也可以$('.numbers').not(':focus')筛选现有集:

function calculate() {
let total = $(".numbers:not(:focus)").get().reduce((sum, el) =>
(sum += parseFloat(+el.value), sum), 0);
console.log('Sum:',total)
}
$('input').on('keydown', calculate)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Change the number of the textbox:</p>
<input class="numbers" value="1" />
<input class="numbers" value="2" />
<input class="numbers" value="3" />
<input class="numbers" value="4" />

最新更新