【问题标题】:Granular manipulation of array variables in Datatables数据表中数组变量的粒度操作
【发布时间】:2017-01-22 23:13:10
【问题描述】:

您可以在fiddle 中看到,我正在寻找一种解决方案,可以让我在 same 数据表列中加入几个 JSON 字段。这是我找到的解决方案:

 function ( data, type, full ) {
      var a = (full["container-title"]);
      var b = (full["volume"]);
      var c = (full["issue"]);
      var d = (full["page"]);
      var x = ([a, b, c, d]);
      return $.map( x, function ( d, i ) {
      return d;}).join( ', ' );
    }

这会输出我想要的值,用逗号分隔。但是,我想在输出之前向 each 变量添加一些 html。比如说,我希望“volume”前面有“Vol.”。但如果我试试这个

var a = 'Vol.' + (full["volume"]);

该值作为“未定义”传递并且完全不可用。还有其他路线吗?

【问题讨论】:

  • 请更正您的小提琴 - 您在 html 部分中有 javascript,在 javascript 部分中有 html,并且您没有加载任何库 - jQuery 和 DataTables。此外,您没有任何示例数据来说明,因此没有任何运行。否则,最好将您的代码嵌入到这个问题中
  • 很抱歉,我一定是发错了小提琴。我现在已经更新了。

标签: javascript jquery arrays datatables


【解决方案1】:

您的方法确实有效,请检查此 JSFiddle (https://jsfiddle.net/annoyingmouse/0zdjy1yz/6/)。您遇到的问题是无法找到 issue 的相关数据,因为它不在您的数据中,如果您在将其添加到您正在笑的数组之前进行检查:

$('#example').dataTable({
    "ajax": {
        "url": "https://api.myjson.com/bins/vawiz",
        "dataSrc": ""
    },
    "columns": [{
        "data": "",
        "defaultContent": null,
        "render": function(data, type, full) {
            var x = [];
            if (full["container-title"]) {
                x.push("Title: " + full["container-title"]);
            }
            if (full["volume"]) {
                x.push("Volumns: " + full["volume"]);
            }
            if (full["issue"]) {
                x.push("Issue: " + full["issue"]);
            }
            if (full["page"]) {
                x.push("Page: " + full["page"]);
            }
            return $.map(x, function(d, i) {
                return d;
            }).join(', ');
        }
    }, ],
});

另外,您的脚本包含的顺序错误。 :-D

【讨论】:

  • 我的朋友,这真的很重要。您可能刚刚为我解决了很多数据表问题,因为我可以在其他任何地方使用它来返回不同的值(尽管我想知道是否有更短的东西?)。我一直在想,如果我将 html 添加到 var 中,它会“破坏”返回的结果,但我不知道有什么不同。谢谢!
  • 很高兴能提供帮助。小版本:jsfiddle.net/annoyingmouse/0zdjy1yz/7
【解决方案2】:

如果你必须指定你想要的项目,这会更优雅

function cFL(string) {
  return string.charAt(0).toUpperCase() + string.slice(1);
}


"render": function(data, type, full) {
  var x = [], y=["container-title","volume","issue","page"];
  for (var i=0;i<y.length;i++) { 
    if(full[y]) x.push(cFL(y[i])+": "+full[y]);
  }
  return x.length==0?"":x.join(", ");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多