У меня есть некоторые xml-подобные данные, возвращенные из запроса:
<table>
<tr linetype="data" linenum="1">
<td colnum="c0">Balanced</td>
<td colnum="c1" rawvalue="24">24</td>
<td colnum="c2">Allocation</td>
</tr>
<tr linetype="data" linenum="2">
<td colnum="c0">Equity</td>
<td colnum="c1" rawvalue="27">27</td>
<td colnum="c2">Allocation</td>
</tr>
<tr linetype="data" linenum="3">
<td colnum="c0">Fixed Income</td>
<td colnum="c1" rawvalue="23">23</td>
<td colnum="c2">Allocation</td>
</tr>
<tr linetype="data" linenum="4">
<td colnum="c0">High Yield Bond</td>
<td colnum="c1" rawvalue="25">25</td>
<td colnum="c2">Allocation</td>
</tr>
<tr linetype="data" linenum="7">
<td colnum="c0">Aggregate Bonds</td>
<td colnum="c1" rawvalue="73">73</td>
<td colnum="c2">Asset Category</td>
</tr>
<tr linetype="data" linenum="8">
<td colnum="c0">Asian Equity</td>
<td colnum="c1" rawvalue="101">101</td>
<td colnum="c2">Asset Category</td>
</tr>
<tr linetype="data" linenum="9">
<td colnum="c0">Balanced</td>
<td colnum="c1" rawvalue="83">83</td>
<td colnum="c2">Asset Category</td>
</tr>
</table>
Дочерние узлы можно сгруппировать по столбцу c2 = «Распределение» или «Категория активов». Как я могу выбрать все <tr>
, где столбец c2 = "Asset Category", без потери родительского тега <table>
?
Благодарность
4 ответа
Одним из решений является использование jquery .filter () , например:
$("table tr td[colnum='c2']").filter(function() {
return $(this).text() == "Asset Category";
}).parent().css("color", "red");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr linetype="data" linenum="1">
<td colnum="c0">Balanced</td>
<td colnum="c1" rawvalue="24">24</td>
<td colnum="c2">Allocation</td>
</tr>
<tr linetype="data" linenum="2">
<td colnum="c0">Equity</td>
<td colnum="c1" rawvalue="27">27</td>
<td colnum="c2">Allocation</td>
</tr>
<tr linetype="data" linenum="3">
<td colnum="c0">Fixed Income</td>
<td colnum="c1" rawvalue="23">23</td>
<td colnum="c2">Allocation</td>
</tr>
<tr linetype="data" linenum="4">
<td colnum="c0">High Yield Bond</td>
<td colnum="c1" rawvalue="25">25</td>
<td colnum="c2">Allocation</td>
</tr>
<tr linetype="data" linenum="7">
<td colnum="c0">Aggregate Bonds</td>
<td colnum="c1" rawvalue="73">73</td>
<td colnum="c2">Asset Category</td>
</tr>
<tr linetype="data" linenum="8">
<td colnum="c0">Asian Equity</td>
<td colnum="c1" rawvalue="101">101</td>
<td colnum="c2">Asset Category</td>
</tr>
<tr linetype="data" linenum="9">
<td colnum="c0">Balanced</td>
<td colnum="c1" rawvalue="83">83</td>
<td colnum="c2">Asset Category</td>
</tr>
</table>
Ссылки
Как это :
$("table tr td:contains('Allocation')").closest("tr").addClass("active");
Это выберет все tr с td, который содержит выделение. Я добавляю активный класс, но вы можете делать все, что захотите.
Может быть, это?
var trs = $("td[colnum=c2]")
.filter(function (x, i) { return $(i).html() === 'Asset Category'; })
.map(function (x, i) { return $(i).parent()[0]; });
См. скрипку.
Я использовал это, чтобы удалить строки, которые не были строками «Категория активов». вы можете легко изменить это, чтобы скрыть или просто изменить стиль этих строк, если это то, что вам нужно. Кроме того, вы можете легко изменить это, чтобы читать в таблице из другого источника, чем сама страница. ДЕМО
var mytable = [];
var rows = $('table').find('tr');
for(var i = 0; i < rows.length; i++) {
if(rows.eq(i).find('td[colnum="c2"]').text() == "Asset Category") {
mytable.push(rows.eq(i));
}
}
$('table').html("");
for(var j = 0; j < mytable.length; j ++) {
$('table').append(mytable[j]);
}
В качестве альтернативы вы можете захотеть прочитать данные таблицы из другого файла (например, файла XML). Эта версия макета импортирует таблицу и оценивает ее, начиная со строки табличных данных. Альтернативный ДЕМО
var tablestring = '<table><tr linetype="data" linenum="1"><td colnum="c0">Balanced</td> <td colnum="c1" rawvalue="24">24</td><td colnum="c2">Allocation</td></tr>...</table>';
var xmlDoc = $.parseXML( tablestring );
var $xml = $( xmlDoc );
var mytable = [];
var rows = $xml.find('tr');
for(var i = 0; i < rows.length; i++) {
if(rows.eq(i).find('td[colnum="c2"]').text() == "Asset Category") {
var temprow = document.createElement("TR");
temprow.innerHTML = rows.eq(i).html();
mytable.push(temprow);
}
}
var newtable = document.createElement("TABLE");
$newtable = $( newtable );
for(var j = 0; j < mytable.length; j ++) {
$newtable.append(mytable[j]);
}
$('body').append($newtable);
Похожие вопросы
Новые вопросы
jquery
jQuery — это библиотека JavaScript. Также рассмотрите возможность добавления тега JavaScript. jQuery — это популярная кросс-браузерная библиотека JavaScript, которая упрощает обход объектной модели документа (DOM), обработку событий, анимацию и взаимодействие AJAX, сводя к минимуму расхождения между браузерами. Вопрос с тегом jQuery должен быть связан с jQuery, поэтому jQuery должен использоваться рассматриваемым кодом, и в вопросе должны быть как минимум элементы, связанные с использованием jQuery.