【问题标题】:jQuery/Javascript foreach If/Else | If empty (do nothing) else (show foreach)jQuery/Javascript foreach If/Else |如果为空(什么都不做),否则(显示 foreach)
【发布时间】:2016-05-10 18:22:05
【问题描述】:

此问题已通过评论解决。工作解决方案发布在下面

所以我得到了这段代码,我正在尝试调整它,因为它没有按照我希望的方式显示。

function writeRow(row) {
    var spans = '';
    for (var i = 0; i < num_of_fields; ++i) {
        // to do: append for select type field -> if select write: name, value, title
        // to do: add class "debug" to name, and for select tag value
        spans += '<div><span class="name"><b>' + field[i].name + ':</b></span> <span class="value">' + row[field[i].name] + '</span></div> ';
    }
    spans += ' <a href="#remove-row" class="remove">&#215;</a>';
    $('#outer-list').append($('<li id="row_' + row_id++ +'">').append(spans));
}

问题在于这一行:

spans += '<div><span class="name"><b>' + field[i].name + ':</b></span> <span class="value">' + row[field[i].name] + '</span></div> ';

问题是当.value &lt;span&gt; 中的row[field[i].name] 为空时,它仍然显示名称和空值字段。 所以我想用 if/else 替换该行,例如 if .value &lt;span&gt; is empty then //do nothing else CODE FROM ABOVE

因为我不会在不尝试自己解决问题的情况下提出问题,所以这是我迄今为止所做的尝试,请记住,我将所有这些 if else 放在与单行代码相同的位置以上!

尝试 1

if $(row[field[i].name]).length == 0) {
  // Do nothing
} else {
  spans += '<div><span class="name"><b>' + field[i].name + ':</b></span> <span class="value">' + row[field[i].name] + '</span></div> ';
}

尝试 2

if $(row[field[i].name]).val().trim().length == 0) {
  // Do nothing
} else {
  spans += '<div><span class="name"><b>' + field[i].name + ':</b></span>  <span class="value">' + row[field[i].name] + '</span></div> ';
}

这些尝试的顺序不正确,而是那些作为 cmets 留在文档中的 2 我尝试了其他一些事情,包括 :empty,但我已经从 cmets 部分删除了它们。

提前感谢您的帮助。如果有什么不清楚的地方请告诉我。

在 Mike C 的帮助下尝试 3

var row_id = 0; // row counter
function writeRow(row) {
    var spans = '';
    for (var i = 0; i < num_of_fields; ++i) {
        // to do: append for select type field -> if select write: name, value, title
        // to do: add class "debug" to name, and for select tag value
        if row[field[i].name].length == 0) {
            // Do nothing
        } else {
            spans += '<div><span class="name"><b>' + field[i].name + ':</b></span> <span class="value">' + row[field[i].name] + '</span></div> ';
        }
    }
    spans += ' <a href="#remove-row" class="remove">&#215;</a>';
    $('#outer-list').append($('<li id="row_' + row_id++ +'">').append(spans));
}

【问题讨论】:

  • 你为什么将它包装在一个 jQuery 函数中? jQuery 将尝试检索 DOM 中与您的查询匹配的元素。直接查看row[field[i].name]就行了……
  • 它的意思正是它看起来的意思。 JS 不需要你对 jQuery 做任何事情。不要这样做$(row[field[i].name])。只需使用row[field[i].name]
  • 打开您的控制台并检查错误。 (Windows 上 F12,Mac 上 Cmd + Opt + I)
  • 您有语法错误。更新您的问题以包含您最近的尝试,以便我查看错误所在。
  • 您缺少一个左括号。将 if row[field[i].name].length == 0) 更改为 if (row[field[i].name].length == 0)if 语句后面总是需要括号。

标签: javascript jquery if-statement foreach


【解决方案1】:

我自己回答,因为我不想有太多没有答案的问题,因为这可能会阻止我!不能这样。太清楚了,这个答案应该归功于 MikeC。但他从未将答案作为答案发布,而是作为评论发布。我请他和其他一些人一起发布答案,以便我们接受。他从来没有这样做,因此我自己发布了他的答案。

Mike C 的工作解决方案

var row_id = 0; // row counter
function writeRow(row) {
var spans = '';
for (var i = 0; i < num_of_fields; ++i) {
    // to do: append for select type field -> if select write: name, value, title
    // to do: add class "debug" to name, and for select tag value
    if (row[field[i].name].length == 0) {
        // Do nothing
    } else {
        spans += '<div><span class="name"><b>' + field[i].name + ':</b></span> <span class="value">' + row[field[i].name] + '</span></div> ';
    }
}
spans += ' <a href="#remove-row" class="remove">&#215;</a>';
$('#outer-list').append($('<li id="row_' + row_id++ +'">').append(spans));
}

【讨论】:

    猜你喜欢
    • 2018-04-25
    • 2016-01-31
    • 1970-01-01
    • 2014-06-20
    • 2014-10-08
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多