0

我正在尝试使用 jQuery 从一个值中减去 1(一)。我已经设法这样做了:

$('.notis').text(parseInt($(".notis").text()) - 1);

问题是<a>this 从看起来像这样减去:

<a href="#" class="notis"><img src="/images/icons/picture.png">3</a>

所以上面的 jquery 会从值中减去 1(一),但也会删除图像!我怎样才能做到这一点保留图像 html?

4

5 回答 5

4

您可以将图像存储在临时变量中,然后使用以下方法将其添加到节点prepend

$('.notis').each(function() {
    var $this = $(this);                        // <-- Reference to current elem
    var $img = $this.find('img');               // <-- Reference to <img>
    $this.text(parseInt($this.text(), 10) - 1); // <-- Your logic
    $this.prepend($img);                        // <-- Add image again.
});

演示:http: //jsfiddle.net/sPnhL/

补充笔记:

  • 使用parseInt( ... , 10)而不是parseInt( ... ). 以零为前缀的数字在浏览器中的处理方式将不一致。通过指定基数 10,数字将被正确解析。
  • $('.notis')选择所有具有 class 的元素notis。当您使用$('notis').text($('notis').text()-1)时,所有具有 class 的元素notis都将包含第一个.notis元素的值(因为$('.notis').text()返回 first 的值.notis)。这就是我.each在代码中使用的原因。
  • 当您要$(this)多次使用时,值得将变量存储$(this)在临时变量中,以提高效率。
于 2012-01-12T20:53:20.353 回答
0

可能有更好的解决方案,但您可以保存链接元素的子元素并在更改文本后重新附加它们:

$('.notis').each(function (index, element) {
    var $children = $(this).children();
    $(this).text(parseInt($(this).text()) - 1).prepend($children);
});

这是一个演示: http: //jsfiddle.net/epuxy/(单击链接时请查看底部更改的数字)

于 2012-01-12T20:53:39.873 回答
0

我建议将数字包装在 a 中<span>并替换其内容。

于 2012-01-12T20:53:50.760 回答
0

将 3 包装在 div 或 span (首选)类中,然后从那里开始。

于 2012-01-12T20:53:54.267 回答
0

最好的解决方案是span在你的号码周围加上一个。这会产生最佳性能。

html

<a href="#" class="notis"><img src="/images/icons/picture.png"><span>3</span></a>

jQuery

$('.notis > span').text(parseInt($(".notis").text()) - 1);

看看这个jsFiddle

于 2012-01-12T20:54:40.593 回答