javascript - 遍历所有跨度并使用 JQuery 更新一个字段

标签 javascript jquery html

我的 html 代码中有几个跨度,我将更新其中一个。因此,我在该跨度的属性 data-id 中为每个跨度赋予了一个唯一编号。该跨度还有一个名为 votes 的类。

现在的问题是,如果我遍历所有跨度,我会检查元素的 data-id 是否等于我通过 SignalR 方法从服务器接收到的 id。

这是一些 html:

<span data-id="7" class="votes">3</span>
<span data-id="9" class="votes">-1</span>

下面的代码不会更新我将更新的跨度。

var voteSpans = $(".votes");
var number = voteSpans.length;

for (var i = 0; i < number; i++) {

    if (voteSpans[i].dataset.id == receivedId) {

        var oldVotes= parseInt(voteSpans[i].html());
        voteSpans[i].html(oldVotes+ parseInt(newVotes));
    }
}

但是这段代码会更新类 votes 的所有范围:

var voteSpans = $(".votes");
var number = voteSpans.length;

for (var i = 0; i < number; i++) {

    if (voteSpans[i].dataset.id == receivedId) {

        var oldVotes= parseInt(voteSpans[i].html());
        voteSpans.html(oldVotes+ parseInt(newVotes));
    }
}

查看最后一行代码之间的差异。

这是怎么来的?

最佳答案

那是因为您使用括号符号来获取元素。 jQuery 对象是一个类似数组的对象。如果您使用括号表示法,则返回指定索引处的值。

返回值是一个没有 html 方法的 DOM 元素。使用 eq 方法代替它通过索引获取元素,但返回值是一个 jQuery 包装的对象:

voteSpans.eq(i).html(oldVotes+ parseInt(newVotes));

另请注意,dataset 属性并未得到广泛支持。考虑改用 jQuery .data() 方法。下面是一个使用 jQuery 方法的例子:

$(".votes").filter(function() {
    return $(this).data('id') === receivedId;
}).text(function(_, oldVotes) {
    return +oldVotes + parseInt(newVotes, 10);
});

关于javascript - 遍历所有跨度并使用 JQuery 更新一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34106575/

相关文章:

JavaScript 自执行函数 - 有什么区别?

javascript - jQuery在div上绑定(bind)点击事件

html - Flexbox - 垂直居中和匹配大小

javascript - 当数据源安全时可以使用 eval() 吗?

javascript - Jquery 延迟。多个 ajax 调用。延迟与异步假

html - 如何在没有换行符的情况下在左侧制作带有图标的按钮?

javascript - 为什么这个切换和过滤器在 Vue JS 中不起作用?

javascript - 根据条件从嵌套的对象数组中删除项目

javascript - 如何使用javascript删除div中的特定元素?

javascript - 如何使用同一个按钮点击两个函数?