2

我正在使用 jquery函数创建ul并添加其中的数据。在这个函数内部,我正在调用另一个函数来解析更多 xml 数据并将其添加到. 但是这个功能只显示。而当我在函数内部时,它会显示正确的.liappendappendul[object Object]console.log(li)func()li

这是我的代码

container.append(
            '<ul>'
                + '<li>'
                    + '<h4 class="title stitle">' + from 
                        + '<section><span class="subtitle">' + routeTime + ' mins    ' + routeDist + ' km</span></section><br>'
                    + '</h4>'
                    + '<ul class="contents">'
                        + '<li>' + '<img src="' + walk + '" />' + '</li>'
                        + '<li>' + '<span class="">' + startTime + '   ' + distance + ' km</li>'
                        + func(lines) //<-- function call here
                    + '</ul>'
                + '</li>' +
            '</ul>'
            );

这是func功能代码

func = function (lines) {
    var li = $('<li></li>');

    lines.each(function () {
        var stopel          = $(this),
            busCode         = stopel.attr('code').slice(1,4),
            stops           = stopel.find('STOP');

        li.append('<img src="' + bus + '" />')
        .append('<span>' + busCode + '</span>')
        .append('<section class="clear"></section>');

        stops.each(function() {
            var el2         = $(this).find('NAME'),
                deptime     = $(this).find('DEPARTURE');
            li.append('<p class="stop">' + deptime.attr('time') + '   ' + el2.attr('val') + '</p>');
        });
        li.append('<p class="last"></p>');
    });
    console.log(li);
    return li;
}

我在哪里犯错?

4

3 回答 3

1

问题是您的函数返回一个 jQuery 对象。当您+在此对象上使用运算符时,您将其用作字符串。因此尝试将其转换为字符串,结果为[object Object].

jQuery 对象有一个名为的方法,该方法将 jQuery 对象.html()的 HTML 内容作为字符串返回 - 您可以安全地在连接中使用它。不过,在您的情况下,您需要一个.outerHtml()jQuery 中不存在的方法,但您可以添加它(请参阅此问题)。或者,您可以简单地使用 DOM(不是 jQuery).outerHTML属性,Firefox 过去不支持它,但他们现在支持它(从版本 11 开始,如果我错了,请纠正我)。

您可以像这样在返回值上调用该方法func

...
+ '<li>' + '<span class="">' + startTime + '   ' + distance + ' km</li>'
+ func(lines).outerHtml() //<-- function call here
+ '</ul>'
...

或者如果你想要 DOM 方式:

+ func(lines).get(0).outerHtml //<-- function call here

快速建议:您应该使用像 Mustache(我的偏好)、Handlebars 等模板解决方案。通过在 Javascript 中连接字符串来创建 HTML 是丑陋的、难以维护的并且违反了关注点分离的规则。当您尝试其中一个库时,您会想知道没有它您将如何生活。

于 2012-11-17T12:29:49.733 回答
1

当您这样做时 var li = $("<li></li>"),您将传递对为 DOM 创建的列表对象实例的引用。您正在操作此对象,因此您将输出作为 [object Object],而在控制台中您将看到该对象的 HTML。

您应该对 li 对象引用进行字符串化或在 $.html(li) 或 li.html() 中使用它;

于 2012-11-17T12:43:51.337 回答
0

您正在返回 jQuery 对象,但看起来您想要 HTML。

在函数结束时试试这个:

return li.outerHTML;
于 2012-11-17T12:29:06.360 回答