【问题标题】:jQuery: Display only new JSON data, iterated with its own paragraph tagjQuery:仅显示新的 JSON 数据,使用自己的段落标签进行迭代
【发布时间】:2016-04-24 03:54:27
【问题描述】:

仅显示 JSON 数据的新更新,使用 jQuery/javascript 在其自己的段落标签中迭代每个值项。

如果info键内的数组中的每一项都已经在其自己的<p>标签中输出; 不要继续循环,但要等到有新项目。

这是我的 JSON:

{
  "info": [
    "Hello world,",
    "how are you doin?",
    "Its not going to well for me unfortunately."
  ]
}

使用这个 jQuery 脚本:

function updatelog() {
 $.getJSON("/static/_info",
  function(data) {
   $.each(data, function(key, item) {
    var value = "";
    var i;
    for (i = 0; i < item.length; i++) {
     value += item[i];
     $("div").add('<p>' + value + '</p>').appendTo(document.body);
    }
   });
  });
}
var interval = window.setInterval(updatelog, 2000);

有了这个我得到了所有的项目,但它并没有停止迭代。我已经在互联网上搜索了很多,以至于我的输入键已经失去了拯救的所有希望。我想这很容易,但我是初学者,也不是 javascript 编码器,我已经准备好脱掉头发了。提前致谢。

【问题讨论】:

标签: javascript jquery json


【解决方案1】:

您可以获取所有 p 元素的文本并将其推送到新数组,然后检查它是否包含来自您的对象的值

var data = JSON.parse('{"info":["Hello world,","how are you doin?","Its not going to well for me unfortunately."]}'),
  pText = [];

$('p').each(function() {
  pText.push($(this).text());
});

data.info.forEach(function(el) {
  if (!pText.includes(el)) {
    $('body').append('<p>' + el + '</p>');
  }
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Hello world,</p>

【讨论】:

    【解决方案2】:

    您可以从每个列表项生成一个哈希,并将其用作 div 元素中的 id。每次检索数据时,都会检查相应的 id 是否存在。如果它存在,则该项目已经存在于您的页面中,因此您不必再次附加它。

    function updatelog() {
        $.getJSON("/static/_info",
        function(data) {
            $.each(data, function(key, item) {
                var i;
                for (i = 0; i < item.length; i++) {
                    var value = item[i];
                    var hashCode = value.hashCode();
                    if(!$("body").find("#" + hashCode).length){
                        $("div")
                        .attr("id", hashCode)
                        .add('<p>' + value + '</p>')
                        .appendTo(document.body);
                    }
                }
            });
        });
    }
    var interval = window.setInterval(updatelog, 2000);
    

    您可以将此实现用于hashCode 函数。 Generate a Hash from string in Javascript/jQuery

    String.prototype.hashCode = function() {
        var hash = 0, i, chr, len;
        if (this.length === 0) return hash;
        for (i = 0, len = this.length; i < len; i++) {
            chr   = this.charCodeAt(i);
            hash  = ((hash << 5) - hash) + chr;
            hash |= 0; // Convert to 32bit integer
        }
        return hash;
    };
    

    【讨论】:

    • 好主意!不过,我收到了一个错误:document.body.find is not a function。我认为这与它是一个 DOM/javascript 函数而不是 jQuery 有关。我对吗?我试图用$.find() 来做这件事,虽然我没有收到错误消息,但它并没有停止迭代。我将使用@Nenad 提供的更简单的解决方案,这就是我真正需要的。但无论如何,谢谢,我会再摆弄一下。
    • @fivethous 由于快速键入而犯了一个错误。我已经更正了选择器$("body").find
    • 不幸的是它仍然没有停止迭代。我一遍又一遍地得到相同的值,每一个都在自己的段落中。
    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多