2010-11-15 5 views
16

Как вы можете преобразовать массив строк, представленных в формате JSON, и преобразовать это в маркированный список HTML с помощью JQuery?Использование JQuery для преобразования массива JSON в HTML-маркированный список

+1

Вы можете добавить пример вашей структуры JSON? – wajiw

+0

http://api.jquery.com/jQuery.getJSON/ – switz

+0

@Switz, getJSON - вот как я получу данные - не понятно, как преобразовать один из массивов в список –

ответ

30
var ul = $('<ul>').appendTo('body'); 
var json = { items: ['item 1', 'item 2', 'item 3'] }; 
$(json.items).each(function(index, item) { 
    ul.append(
     $(document.createElement('li')).text(item) 
    ); 
}); 

Насколько выборки в JSON с сервера с помощью AJAX обеспокоен вы можете использовать функцию $.getJSON().

Live demo.

+2

Я никогда не видел jsfiddle.net раньше. Я одобряю. – climbage

+0

@climbage, это очень хороший сайт, позволяющий быстро создавать макеты javascript, поддерживающие популярные фреймворки. –

+0

Отлично, спасибо. Я собираюсь использовать это с этого момента. – climbage

0

Если ваши JSON строки в stringArr:

$.each(stringArr, function(idx, val) { 
    $('<li></li>').html(val); 
} 

или что-то среди этих линий должны это сделать.

0

Что-то вроде этого, может быть? Я не тестировал его, но он должен работать.

ul = $("<ul/>"); 
$(json_arr).each(function(){ 
    $("<li/>").text(this).appendTo(ul); 
}); 

// add ul to DOM 
3

JSON строку так будет выглядеть так:

'["foo","bar","base","ball"]' 

Вы можете разобрать, что в объект Javascript массива по телефону JSON.parse(), перебирать этот массив и вставить строки.

var jsonstring = '["foo","bar","base","ball"]', 
    arr = JSON.parse(jsonstring), 
    len = arr.length; 

while(len--) { 
    $('<li>', { 
     text: arr[len] 
    }).appendTo('ul'); 
} 
6
<script language="JavaScript" type="text/javascript"> 

// Here is the code I use. You should be able to adapt it to your needs. 

function process_test_json() { 
    var jsonDataArr = { "Errors":[],"Success":true,"Data":{"step0":{"collectionNameStr":"ideas_org_Private","url_root":"http:\/\/192.168.1.128:8500\/ideas_org\/","collectionPathStr":"C:\\ColdFusion8\\wwwroot\\ideas_org\\wwwrootchapter0-2\\verity_collections\\","writeVerityLastFileNameStr":"C:\\ColdFusion8\\wwwroot\\ideas_org\\wwwroot\\chapter0-2\\LastFileName.txt","doneFlag":false,"state_dbrec":{},"errorMsgStr":"","fileroot":"C:\\ColdFusion8\\wwwroot\\ideas_org\\wwwroot"}}}; 

var htmlStr= "<h3 class='recurse_title'>[jsonDataArr] struct is</h3> " + recurse(jsonDataArr); 
alert(htmlStr); 
$(document.createElement('div')).attr("class", "main_div").html(htmlStr).appendTo('div#out'); 
$("div#outAsHtml").text($("div#out").html()); 
} 
function recurse(data) { 
    var htmlRetStr = "<ul class='recurseObj' >"; 
    for (var key in data) { 
     if (typeof(data[key])== 'object' && data[key] != null) { 
      htmlRetStr += "<li class='keyObj' ><strong>" + key + ":</strong><ul class='recurseSubObj' >"; 
      htmlRetStr += recurse(data[key]); 
      htmlRetStr += '</ul ></li >'; 
     } else { 
      htmlRetStr += ("<li class='keyStr' ><strong>" + key + ': </strong>&quot;' + data[key] + '&quot;</li >'); 
     } 
    }; 
    htmlRetStr += '</ul >';  
    return(htmlRetStr); 
} 

</script> 
</head><body> 
<button onclick="process_test_json()" >Run process_test_json()</button> 
<div id="out"></div> 
<div id="outAsHtml"></div> 
</body> 

<!-- QUESTION: Maybe some one with more jquery experience 
could convert this to a shorter/pure jquery method --> 
+0

Я не думал о рекурсии. Благодарю. – InbetweenWeekends

2

Использование jQuery jPut plugin. Просто создайте html-шаблон &, назовите свой json-файл. Вы также можете вызвать АЯКС файл через jPut (ajax_url)

http://plugins.jquery.com/jput/

<script> 
    $(document).ready(function(){ 
     var json = [{"name": "item1","link":"link1"},{"name": "item2","link":"link2"}]; 

      //jPut code 
      $("#menu").jPut({ 
      jsonData:json, 
      name:"template", 
      }); 
    }); 
</script> 

<body>  
     <!-- jput template, the li that you want to append to ul--> 
     <div jput="template"> 
      <li><a href="http://yourdomain.com/{{link}}">{{name}}</a></li> 
     </div> 

     <!-- your main ul --> 
     <ul id="menu"> 
     </ul> 
</body> 
+0

'jput' не является допустимым атрибутом. – Benio

+0

@Benio Добавьте jput.js в свой HTML. – shabeer

+0

'jput', как показано в примере кода, не является допустимым атрибутом. Если вы хотите использовать пользовательский атрибут, вы должны использовать [атрибут пользовательских данных] (https://www.w3.org/TR/html5/dom.html#embedding-custom-non-visible-data-with-the- data - * - attributes), например 'data-jput', в противном случае это недействительный код HTML. – Benio

Смежные вопросы