Вы запускаете cloneNode
на объекте jQuery. Вы начинаете с нативного API, затем конвертируете его в объект jQuery, затем переключаетесь обратно.
Полагаю, вы могли бы сделать:
genres_html.appendChild( genre.get(0).cloneNode(true) );
Но тогда я подозреваю, что вы потеряете свой data
.
EDIT:
Если вам нужен jQuery, вместо создания фрагмента попробуйте создать пустой объект jQuery, а затем вставить в него каждый жанр:
var genres_html = $();
...
genres_html.push( genre );
EDIT:
Дайте это попробовать. Я не эксперт по DOM, но это может сработать для вас.
var genres_html = document.createDocumentFragment();
$(xmlData).find('genres').each(function(i, node) {
var genre = document.createElement('a');
genre.setAttribute('class','button');
genre.setAttribute('href', 'javascript:void(0)');
var $node = $(node);
genre.setAttribute('genreData', $node.find('genreID:first').text() );
genre.innerHTML = $node.find('genreName:first').text();
genres_html.appendChild( genre.cloneNode(true) ); // Not sure why you would need to make a clone??
});
var list = document.getElementById('list');
list.appendChild(genres_html);
// error: $('#list a:first').data('genreData') is null
alert($('#list a:first').attr('genreData'));
Дайте мне знать, если это работает.
РЕДАКТИРОВАТЬ: изменил мою ошибку с innerHTML
EDIT2: использование собственного innerHTML для добавления к #list