javascript - 将 li 附加到 ul 时遇到问题

标签 javascript jquery dom-manipulation

我正在创建一个 ul 并使用 jquery append 函数向其中添加 li 以及其中的数据。在这个 append 函数中,我调用另一个函数来解析更多 xml 数据并将其添加到 ul 中。但这个函数只显示[object Object]。而当我在 func() 函数内 console.log(li) 时,它会显示正确的 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;
}

我哪里出错了?

最佳答案

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

jQuery 对象有一个名为 .html() 的方法它以字符串形式返回该 jQuery 对象的 HTML 内容 - 您可以在串联中安全地使用它。不过,在您的情况下,您需要一个 .outerHtml() 方法,该方法在 jQuery 中不存在,但您可以添加它(请参阅 this question )。或者,您可以简单地使用 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 很丑陋,难以维护,并且违反了 separation of concerns 的规则。 。当您尝试其中一个库时,您会想知道如果没有它您将如何生活。

关于javascript - 将 li 附加到 ul 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13430541/

相关文章:

javascript - CKEDITOR 将 <b> 替换为 <strong> 和其他标签

javascript - 如果值 = 0,则显示占位符

javascript - 如果加载一次 jquery,则防止相同函数的实例

javascript - 响应式网页设计的 DOM 操作性能

jquery - 如何使用 jQuery 移动 div 的多个实例?

javascript - 通过子值操纵父div

javascript - 选中复选框已禁用(Jquery)

javascript - 使用自定义控件制作 html5 视频/音频播放列表播放器

javascript - 只允许在输入字段中输入数字

Javascript:转换 HTML 实体然后下载 HTML