2016-06-12 4 views
0

мне нужно добиться следующего:JavaScript: Append ребенка со стилем и петлей

<ul data-role="listview"> 
<li data-icon="false"> 
<!--loop content here--> 
</li> 
</ul> 

с помощью JavaScript. Я думаю, что добавить ребенка будет трюк. Можете ли вы рассказать мне, как использовать appendchild для достижения этого результата? я попробовал следующее:

$(document).ready(function() { 
$(document).bind('deviceready', function() { 
    //Phonegap ready 
    onDeviceReady(); 
}); 


//var output = document.getElementById("output"); 
var _ul = document.createElement('ul'); 
var _li= document.createElement('li'); 
_ul.setAttribute("data-role", "listview"); 
_li.setAttribute("data-icon", "false"); 

$.ajax({ 
    url: 'json_encoded_db.php', 
    dataType: 'jsonp', 
    jsonp: 'jsoncallback', 
    timeout: 5000, 
    success: function(data, status){ 
     $.each(data, function(i,item) { 

      _li.innerHTML = 
      '<a href="" id="'+item.id+'">'+ 
      '<img src="images/'+item.img+'">'+ 
      '</a>'; 

      _ul.appendChild(_li.cloneNode(true)); 
     }); 

    }, 
    error: function(){ 
     output.text('There was an error loading the data.'); 
    } 
}); 
document.getElementById("output").appendChild(_ul); 
}); 

, но это не работает, я имею в виду, это список без какого-либо стиля и, видимо, не получает свойства данных ролей. (очевидно, что он работает с получением данных из базы данных, я тестировал его).

+1

Что вы имеете в виду «это список без какого-либо стиля»? Ничто в показанном коде не делает никакого стиля. Вы говорите, что элементы li * do * создаются с правильным содержанием якоря и изображения, но без атрибутов 'data-'? – nnnnnn

+0

Я разработал data-role = "listview" и data-icon = "false". Точно, он создается с правильным содержанием привязки и изображения, но без атрибутов данных. – Tony33

+0

Я скопировал ваш код в скрипку и заменил вызов Ajax таймаутом (потому что я не мог заставить Ajax работать в скрипке), и элементы создаются правильно * с * атрибутами 'data-': https://jsfiddle.net/uu35z9a3/ – nnnnnn

ответ

0

переместите этот код в свой $ .each() вашего successCallback. Так что ваши $ .each() будет выглядеть следующим образом:

$.each(data, function(i,item) { 
    var _li= document.createElement('li'); 
    _li.setAttribute("data-icon", "false"); 
    _li.innerHTML = 
     '<a href="" id="'+item.id+'">'+ 
     '<img src="images/'+item.img+'">'+ 
     '</a>'; 

     _ul.appendChild(_li); 
}); 

также избавиться от клонирования «_li»

+0

не могли бы вы выслать мне полный код? потому что я продолжаю получать то же самое. – Tony33