2013-08-14 3 views
-3

У меня есть файл JSON, и я показываю его в загрузочной таблице.JSON hide "null" data

Вот код, который я использую для отображения:

$(document).ready(function(){ 
    $.getJSON(url, function(data){ 
     content = '<h1><p class="p1"><span class="s1">' + 
        data.test.name + '</span></p></h1><table class="table table-bordered"><tbody><tr><td>Section:</td><td>' + 
        data.test.section + '</td></tr><tr><td>Synonyms:</td><td>' + 
        data.test.synonyms + '</td></tr><tr><td>Container:</td><td>' + 
        data.test.container + '</td></tr><tr><td>Reference Ranges:</td><td>' + 
        data.test.reference + '</td></tr><tr><td>Availability:</td><td>' + 
        data.test.availability + '</td></tr><tr><td>Special Handling:</td><td>' + 
        data.test.specialHandling + '</td></tr><tr><td>Additional Comments:</td><td>' + 
        data.test.additionalComments + '</td></tr></tbody></table>'; 
      $(content).appendTo("#main"); 
      $("#main").fadeIn(); 

    }); 
}); 

Я хотел, чтобы скрыть любое значение, = к «нулю», и с трудом.

+1

Это это не php ... это JavaScript. – Lance

+0

Это на самом деле javascript – hek2mgl

+0

a) Это не PHP. B) Вам придется разбить это до минимальной необходимой разметки; никто не сможет понять весь этот код на одной строке. –

ответ

1

Если вы просто хотите, пустые значения и не имеют возможных falsey значения не возвращается, это будет работать как для нулевых и отсутствующих значений:

адаптированный для работы в скрипкой

Working Fiddle

var data = { 
    test: { 
     name: "bob", 
     section: null, 
     synonyms: "this, that", 
     container: "box", 
     reference: null, 
     availability: null, 
     specialHandling: "be careful", 
     additionalComments: "No comment" 
    } 
}; 

var content = '<h1><p class="p1"><span class="s1">' + 
      (data.test.name || '') + '</span></p></h1><table class="table table-bordered"><tbody><tr><td>Section:</td><td>' + 
      (data.test.section || '') + '</td></tr><tr><td>Synonyms:</td><td>' + 
      (data.test.synonyms || '') + '</td></tr><tr><td>Container:</td><td>' + 
      (data.test.container || '') + '</td></tr><tr><td>Reference Ranges:</td><td>' + 
      (data.test.reference || '') + '</td></tr><tr><td>Availability:</td><td>' + 
      (data.test.availability || '') + '</td></tr><tr><td>Special Handling:</td><td>' + 
      (data.test.specialHandling || '') + '</td></tr><tr><td>Additional Comments:</td><td>' + 
      (data.test.additionalComments || '') + '</td></tr></tbody></table>'; 
    $(content).appendTo("#main"); 
    $("#main").fadeIn(); 

Версия 2

Эта версия использует функцию scrub для удаления других значений, таких как «()». При добавлении более условий, то это, вероятно, будет хорошей идеей, чтобы пересмотреть логику скраб ...

Working fiddle

// Sample dataset 
var data = { 
    test: { 
     "name": "RNA Polymerase III Antibody", 
     "id": 96800, 
     "container": null, 
     "reference": null, 
     "section": null, 
     "synonyms": "()", 
     "availability": null, 
     "specialHandling": null, 
     "additionalComments": null 
    } 
}; 

// Extra assignment kept for clarity 
function scrub(inStr) { 
    inStr = inStr || ''; // Set to self if it is a truthy value 
    inStr = "()" === inStr ? '' : inStr; 
    return inStr; 
} 

var content = '<h1><p class="p1"><span class="s1">' + 
      scrub(data.test.name) + '</span></p></h1><table class="table table-bordered"><tbody><tr><td>Section:</td><td>' + 
      scrub(data.test.section) + '</td></tr><tr><td>Synonyms:</td><td>' + 
      scrub(data.test.synonyms) + '</td></tr><tr><td>Container:</td><td>' + 
      scrub(data.test.container) + '</td></tr><tr><td>Reference Ranges:</td><td>' + 
      scrub(data.test.reference) + '</td></tr><tr><td>Availability:</td><td>' + 
      scrub(data.test.availability) + '</td></tr><tr><td>Special Handling:</td><td>' + 
      scrub(data.test.specialHandling) + '</td></tr><tr><td>Additional Comments:</td><td>' + 
      scrub(data.test.additionalComments) + '</td></tr></tbody></table>'; 
    $(content).appendTo("#main"); 
    $("#main").fadeIn(); 
+0

Еще один вопрос: почти такой же код на другой странице, и этот возвращает JSON с результатом «()», означающим empty, и я хочу скрыть if = «()» на этой странице будет ли это также работать в этом случае?Пример JSON '{ "тесты": [ { "имя": "РНК-полимераза III Антитело", "Идентификатор": 96800, "контейнер": нулевой, "ссылка": "раздел" нулевой, : нуль, "синонимы": "()", "доступность": нулевая, "specialHandling": нулевая, "additionalComments": нулевая }, ] } ' –

+0

нет, любая строка будет вычисляться так. В приведенной выше логике сказано, что для первого значения используется первое значение, если оно равно true, в противном случае используется второе значение. Я добавлю это. – dc5

0

Как уже упоминалось комментарий вы не сказали, как вы хотели бы, чтобы вывести значения Вот то, что вы должны получить собирается:

Предположим, у нас есть эти данные возвращаются

var data = {}; 
data.test = { 
    section: "mySection", 
    synonyms: "mySyn", 
    container: "myContainer", 
    reference: undefined, 
    availability: "myAvail", 
    specialHandling : undefined, 
    additionalComments: "myComment" 
} 

И у вас есть объект с теми же ключами, как ваш data.test

var labels = {}; 
labels.test = { 
    section: "Section", 
    synonyms: "Synonyms", 
    container: "Container", 
    reference: "Reference Ranges", 
    availability: "Availability", 
    specialHandling: "Special Handling" , 
    additionalComments: "Additional Comments" 
} 

Следующая функция может записать данные

function writeTablerow(labels, data){ 
    for (var key in data) { 
     if (data.hasOwnProperty(key) && data[key] !== undefined) { 
      console.log(labels[key], data[key]); 
     } 
    } 
}; 

Вы назвали бы это так:

writeTablerow(labels.test, data.test);