2014-05-23 212 views
1

请看看这个Fiddle example。我正在研究ajax脚本来解析JSON文件。一个在JSON文件的项目(B项)的包含单词“钠”在其表,我可以使用这个脚本打印表格:查找表格单元格中的单词,然后从下一个单元格中提取文本

$.ajax({ 
    url: "url.json", 
    success: function (data) { 

     $(data.query.results.json.json).each(function (index, item) {   
     var title = item.title; 
     var table = item.table; 
      if (table.indexOf("Sodium") >= 0){ 
     $('.'+ title+'table').html(''+table+'') 
      } 
     }); 
    }, 
    error: function() {} 
}); 

因为它可以找到这个词“钠”表,我想知道是否有可能找到该单词所在的td,然后找到下一个最接近的td来提取在此情况下为1200 mg的钠量?会像.closest('td').text();工作?但如何选择选择器?

JSON文件

[{"title":"A","table":"<table class=\"tablesorter\"><thead><tr><td >Ingredient<\/td><td >Amount<\/td><td>% Daily Value**<\/td><\/tr><\/thead><tbody><tr><td>Calories<\/td><td>10<\/td><td>&nbsp;<\/td><\/tr><tr><td>Total Carbohydrate<\/td><td>2g<\/td><td>&lt;1<\/td><\/tr><tr><td>Vitamin C<\/td><td>110mg<\/td><td>4<\/td><\/tr><tr><td>Potassium<\/td><td>235mg<\/td><td>6<\/td><\/tr><tr><td>Omega 6<\/td><td>1100mg<\/td><td>*<\/td><\/tr><tr><td>Vitamin B<\/td><td>1200mg<\/td><td>*<\/td><\/tr><tr><td>Vitamin E<\/td><td>300mg<\/td><td>*<\/td><\/tr><\/tbody><\/table>"},{"title":"B","table":"<table class=\"tablesorter\"><thead><tr><td >Ingredient<\/td><td >Amount<\/td><td>% Daily Value**<\/td><\/tr><\/thead><tbody><tr><td>Calories<\/td><td>10<\/td><td>&nbsp;<\/td><\/tr><tr><td>Total Carbohydrate<\/td><td>2g<\/td><td>&lt;1<\/td><\/tr><tr><td>Vitamin C<\/td><td>110mg<\/td><td>4<\/td><\/tr><tr><td>Potassium<\/td><td>245mg<\/td><td>6<\/td><\/tr><tr><td>Fish Oil<\/td><td>1100mg<\/td><td>*<\/td><\/tr><tr><td>Sodium (from Kitchen Salt)<\/td><td>1200mg<\/td><td>*<\/td><\/tr><tr><td>Vitamin E<\/td><td>300mg<\/td><td>*<\/td><\/tr><\/tbody><\/table>"}] 

表结构:

<table class="tablesorter"> 
<thead> 
<tr> 
<td>Ingredient</td> 
<td>Amount</td> 
<td>% Daily Value**</td> 
</tr> 
</thead> 
<tbody> 
<tr> 
<td>Calories</td> 
<td>10</td> 
<td></td> 
</tr> 
<tr> 
<td>Total Carbohydrate</td> 
<td>2g</td> 
<td>&lt;1</td> 
</tr> 
<tr> 
<td>Vitamin C</td> 
<td>110mg</td> 
<td>4</td> 
</tr> 
<tr> //************************ 
<td>Sodium (from Kitchen Salt)</td> 
<td>1200mg</td> 
<td>6</td> 
</tr> //************************* 
<tr> 
<td>Omega 6</td> 
<td>1100mg</td> 
<td>*</td> 
</tr> 
<tr> 
<td>Vitamin B</td> 
<td>1200mg</td> 
<td>*</td> 
</tr> 
<tr> 
<td>Vitamin E</td> 
<td>300mg</td> 
<td>*</td> 
</tr> 
</tbody> 
</table> 

回答

2

您可以通过解析HTML使用jQuery :contains()选择只搜索:

$.ajax({ 
    url: "url.json", 
    success: function (data) { 

     $(data.query.results.json.json).each(function (index, item) {   
      var title = item.title; 
      var table = item.table; 
      if (table.indexOf("Sodium") >= 0) { 
       $('.'+ title+'table').html(''+table+''); 
       alert($('.'+title+'table').find('td:contains(Sodium)').next().html()); 
      } 
     }); 
    }, 
    error: function() {} 
}); 

Demo

该警报呼叫将在其文本中包含Sodium的那个之后的td的内容发出警报。

+2

小心:':contains'区分大小写。 – Jeff

相关问题