#javascript #jquery #arrays
#javascript #jquery #массивы
Вопрос:
У меня есть массив, который выглядит следующим образом (полный список здесь):
var verbMap = [
{
infinitive: "gehen",
thirdPres: "geht",
thirdPast: "ging",
aux: "ist",
pastPart: "gegangen",
english: "go"
},
{
infinitive: "gelingen",
thirdPres: "gelingt",
thirdPast: "gelang",
aux: "ist",
pastPart: "gelungen",
english: "succeed"
}
];
Я пытаюсь просмотреть каждую часть и распечатать ее в таблице. Я могу получить доступ к одному из значений, если я специально его настрою, но мне нужно иметь возможность печатать все значения в <td>
s . Каждая часть массива будет представлять собой a <tr>
со значениями внутри в качестве <td>
тегов.
Каков наилучший способ сделать это, и есть ли лучший способ настроить данные и взаимодействовать с ними?
Ответ №1:
Создать таблицу с использованием вложенных циклов for не должно быть слишком сложно (в примере для построения элементов используется jQuery…но вам, очевидно, не нужно):
Редактировать
Удален jQuery, поскольку он, казалось, беспокоил всех (хотя управляющие структуры были важной частью примера):
var table = document.createElement('table');
for(v in verbMap){
var tr = document.createElement('tr');
for(p in verbMap[v]){
var td = document.createElement('td');
var text = document.createTextNode(verbMap[v][p]);
td.appendChild(text);
tr.appendChild(td);
}
table.appendChild(tr);
}
Комментарии:
1. Для этого требуется jQuery, но в вопросе нет тега jQuery.
2. @Peter Olson — я обращаюсь к этому в сообщении. Пример предназначен для демонстрации используемого цикла, а не для точного построения элементов.
3. jQuery не был запрошен или указан каким-либо образом.
4. @AndrewPeacock
innerText
является нестандартным и не поддерживается Firefox. Смотрите мой ответ, если вам нужен этот браузер.
Ответ №2:
Попробуйте выполнить следующее
for (var i = 0; i < verbMath.length; i ) {
var row = document.createElement('tr');
var item = verbMath[i];
for (var prop in item) {
if (item.hasOwnProperty(prop)) {
var data = document.createElement('td');
data.innerText = item[prop];
row.appendChild(data);
}
}
// Need to append the row here to the appropriate place in your DOM
}
Комментарии:
1. 1 за использование обычного javascript (поскольку jQuery не был запрошен или указан) и за включение использования hasOwnProperty() .
Ответ №3:
Firefox не поддерживает innerText
, поэтому лучше создать текстовый узел и добавить его к дочернему элементу. Также может быть лучше определить массив, чтобы гарантировать порядок столбцов и легко изменять его при необходимости.
var table = document.getElementById("tbl"), i, j, tr, td, text;
var order = ["infinitive", "thirdPres", "thirdPast", "aux", "pastPart", "english"]
for(i=0; i<verbMap.length; i ){
tr = document.createElement('tr');
for(j = 0; j<order.length; j ){
td = document.createElement('td');
text = document.createTextNode(verbMap[i][order[j]]);
td.appendChild(text);
tr.appendChild(td);
}
table.appendChild(tr);
}
Комментарии:
1. Большое вам спасибо. Я просто использую это как простое учебное пособие, в основном для себя, поэтому кроссбраузерная совместимость не вызывает беспокойства. Это будет полезно, если мне когда-нибудь понадобится использовать это в будущем, спасибо.
Ответ №4:
Есть несколько очень хороших инструментов для создания таблиц из таких структур данных. Рассмотрите возможность использования jQuery и подключаемого модуля Datatables.
Вот несколько ссылок:
jQuery: http://jquery.com /
Таблицы данных: http://datatables.net /
Комментарии:
1. Я пытался использовать jQuery, но не был уверен, как это сделать.
2. @AndrewPeacock, да, может показаться, что вы получаете целый набор инструментов, когда вы просто хотите вбить простой гвоздь, но если вы уделите этому немного времени, вы скоро сможете не только найти молоток, но и получать удовольствие от ускорения работы со всем набором инструментов.
3. Я знаю приличное количество, но для более сложных проблем, подобных этой, я теряюсь.