0

我编写了一个将多维 json 对象转换为 html 列表的函数:http: //jsfiddle.net/KcvG6/

  1. 为什么该函数会使列表加倍?更新:http: //jsfiddle.net/KcvG6/2/

  2. 做的逻辑有什么改进吗?

  3. 原始 JSON 对象在 url 属性中生成 url。这些 url 是使用给定的 slug 生成的。如果给定的 slug 尚不可用(用户尚未选择任何内容或不应该呈现链接的其他内容:

    'image': {
        'index': {
            'name': 'Show all images',
            'url': Routing.generate('AcmeImageBundle_Image_index')
        },
        'new': {
            'name': 'Add new image',
            'url': Routing.generate('AcmeImageBundle_Image_new')
        },
        'edit': {
            'name': 'Edit selected image',
            'url': Routing.generate('AcmeImageBundle_Image_edit', { 'slug': imageSlug })
        },
        'delete': {
            'name': 'Delete selected image',
            'url': Routing.generate('AcmeImageBundle_Image_delete', { 'slug': imageSlug })
        }
    }
    
4

2 回答 2

1

由于调用了.children(),它发生了两次。您正在用列表替换每个子元素。相反,选择第一个孩子并替换它。

$(container).children().first().replaceWith(renderList(objectCollection));

http://jsfiddle.net/KcvG6/1/

如果您需要删除<p>元素,请单独执行。

于 2012-05-25T15:09:23.417 回答
1

http://jsfiddle.net/VF2sm/

假设您只想替换ul文档中的 ,调用.children是不够的。您需要使用.find,否则它将替换所有孩子,其中您目前有 2 个

$(container).find('ul').replaceWith(renderList(objectCollection));

或者,您可以轻松清除所有内容并用您的列表替换它,如下所示:

$(container).html(renderList(objectCollection));

就您的renderList()功能质量而言,我认为它还不错。

于 2012-05-25T15:13:18.940 回答