ЭТОТ ВОПРОС РЕШЕН В СВОБОДЕ КОММЕНТАРИИ. РАБОТАЮЩЕЕ РЕШЕНИЕ ВЫПОЛНЕНО НИЖЕjQuery/Javascript foreach If/Else | Если пусто (ничего не делать) else (show foreach)
Итак, я получил этот кусок кода, который я пытаюсь адаптировать, поскольку он не показывает, как я хочу.
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">×</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> ';
Проблема заключается в том, что, когда row[field[i].name]
внутри .value <span>
пустой, он все еще показывает имя и поле пустого значения. Итак, я подумал о замене этой строки на if if else, если .value <span>
пуст, а затем //do nothing
еще CODE FROM ABOVE
.
Поскольку я не собираюсь задавать вопрос, не пытаясь его исправить, сначала сделаем попытку, которую я сделал до сих пор, поэтому имейте в виду, что я разместил все это, если бы остался на том же месте, что и одна строка код выше!
Покушение 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> ';
}
Попытки не в правильном порядке, но те 2, где оставил в документе, как комментарии, которые я попробовал несколько других вещи, в том числе :empty
, но я уже удалил их из раздела комментариев.
Заранее благодарим за любую помощь. И если что-то неясно, пожалуйста, дайте мне знать.
Покушение 3 с помощью от 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">×</a>';
$('#outer-list').append($('<li id="row_' + row_id++ +'">').append(spans));
}
Почему вы окружив его функции JQuery? jQuery попытается извлечь элементы в DOM, соответствующие вашему запросу. Просто проверьте 'row [field [i] .name]' непосредственно ... –
@MikeC Привет, спасибо за помощь, я не знаю, что вы имеете в виду с 'direct'? Он находится внутри файла .js из модуля Joomla, поэтому он завернут. – purple11111
Это означает, что это похоже. JS не требует от вас что-либо делать с jQuery. Не делайте '$ (строка [field [i] .name])'. Просто используйте 'row [field [i] .name]'. –