У меня есть некоторые 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
abacusit 15 Дек 2014 в 22:46
 – 
adeneo
15 Дек 2014 в 22:51

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>

Ссылки

.parent ( )

3
Alex Char 15 Дек 2014 в 22:51
1
Я нашел это лучшим ответом. Но я не могу «поднять» это без достаточного количества очков. Спасибо за все вклады!
 – 
abacusit
20 Дек 2014 в 00:44

Как это :

$("table tr td:contains('Allocation')").closest("tr").addClass("active");

Это выберет все tr с td, который содержит выделение. Я добавляю активный класс, но вы можете делать все, что захотите.

0
Mathieu Labrie Parent 15 Дек 2014 в 22:49

Может быть, это?

var trs = $("td[colnum=c2]")
    .filter(function (x, i) { return $(i).html() === 'Asset Category'; })
    .map(function (x, i) { return $(i).parent()[0]; });

См. скрипку.

0
lante 15 Дек 2014 в 22:54

Я использовал это, чтобы удалить строки, которые не были строками «Категория активов». вы можете легко изменить это, чтобы скрыть или просто изменить стиль этих строк, если это то, что вам нужно. Кроме того, вы можете легко изменить это, чтобы читать в таблице из другого источника, чем сама страница. ДЕМО

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);
0
JRulle 16 Дек 2014 в 00:00