我正在创建一个 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/