在dom中查找json:contains,替换每个元素(单独)

时间:2013-12-30 18:40:31

标签: javascript jquery json string string-formatting

我在表中有一些服务器端生成的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:对不起,如果我的英语很糟糕,那不是我的母语。

1 个答案:

答案 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