我在表中有一些服务器端生成的json字符串,所以我不知道它可能会出现什么内容。我甚至不知道是否有JSON字符串。该表如下所示:
<table>
<tr>
<th> Some Header</th>
<th> Some Header</th>
</tr>
<tr>
<td> Something </td>
<td>
{"Something":true,"Something":false,"Somthing":true,"Something":false,"Something":true,"Something else":false,"Something":false}
</td>
</tr>
<tr>
<td>Something</td>
<td>
{"Something":true,"Something":false,"Something":true,"Something":false,"Something":true,"Something else":false,"Something":false}
</td>
</tr>
</table>
我需要将每个json的字符串格式化为格式化表格。我尝试使用:contains(":true");
,但返回的元素如下所示:
{“Something”:true,“Something”:false,“Something”:true,“Something”:false,“Something”:true,“Something”:false,“Something”:false} {“Something “:true,”Something“:false,”Something“:true,”Something“:false,”Something“:true,”Something“:false,”Something“:false}
它按预期返回json,但我无法找到一种方法来引用包含元素,用一个格式化的表替换它。我为另一个表做了一个不同的函数,其中每个json字符串都有一个已定义的兄弟,所以我引用了它。这是函数:
var jsonTable = function(s){
var search = "th:contains("+s+")";
var container = $(search).siblings();
var string = container.text();
var obj = jQuery.parseJSON(string);
container.text(" ");
var nospace = s.replace(/\s+/g, '');
container.append("<table class='mini-table' id="+nospace+"></table>");
jQuery.each(obj, function(text, val){
$("#"+nospace).append("<tr><td class='large'>"+text+"</td><td class="+val+"></td></tr>");
});
return true;
};
所以,我的问题是:
如何定位使用以下内容找到的特定元素:包含何时返回多个元素?任何帮助或更好的方法都是受欢迎的。
Ps:对不起,如果我的英语很糟糕,那不是我的母语。
答案 0 :(得分:1)
你可以这样做。代码循环遍历每个单元格,检查第一个字符是{
还是[
,如果是,则假定内容为json。也可以检查最后一个字符并使用try/catch
块以避免抛出JSON.parse
错误
$('td').each(function(){
var txt=$.trim($(this).text());
var reg=/\{|\[/;
if(reg.test(txt.charAt(0)) ){
/* text is probably json, should check last character also*/\
/* would wrap this in try/catch for safety and additional validation that it is JSON*/
var obj=JSON.parse( txt);
/* "this" is td with json in it*/
$(this).append('<span>This is json</span>')
}
})
的 DEMO 强>